Python繼承
- 繼承是用來實現代碼複用和設計複用的機制,是面向對象程序設計的重要特性之一。設計一個新類時,如果可以繼承一個已有的設計良好的類然後進行二次開發,無疑會大幅度減少開發工作量。
- 在繼承關係中,已有的、設計好的類稱爲父類或基類,新設計的類稱爲子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。如果需要在派生類中調用基類的方法,可以使用內置函數super()或者通過“基類名.方法名()”的方式來實現這一目的。
- Python支持多繼承,如果父類中有相同的方法名,而在子類中使用時沒有指定父類名,則Python解釋器將從左向右按順序進行搜索。
在派生類中調用基類方法。
class Person(object):
def __init__(self, name='', age=20, sex='man'):
#通過調用方法進行初始化,這樣可以對參數進行更好地控制
self.setName(name)
self.setAge(age)
self.setSex(sex)
def setName(self, name):
if not isinstance(name, str):
raise Exception('name must be string.')
self.__name = name
def setAge(self, age):
if type(age) != int:
raise Exception('age must be integer.')
self.__age = age
def setSex(self, sex):
if sex not in ('man', 'woman'):
raise Exception('sex must be "man" or "woman"')
self.__sex = sex
def show(self):
print(self.__name, self.__age, self.__sex, sep='\n')
#派生類
class Teacher(Person):
def __init__(self, name='', age=30,
sex='man', department='Computer'):
#調用基類構造方法初始化基類的私有數據成員
super(Teacher, self).__init__(name, age, sex)
#也可以這樣初始化基類的私有數據成員
#Person.__init__(self, name, age, sex)
#調用自己的方法初始化派生類的數據成員
self.setDepartment(department)
#在派生類中新增加的方法
def setDepartment(self, department):
if type(department) != str:
raise Exception('department must be a string.')
self.__department = department
#覆蓋了從父類中繼承來的方法
def show(self):
#先調用父類的同名方法,顯示從父類中繼承來的數據成員
super(Teacher, self).show()
#再顯示派生類中的私有數據成員
print(self.__department)
if __name__ =='__main__':
#創建基類對象
zhangsan = Person('Zhang San', 19, 'man')
zhangsan.show()
print('='*30)
#創建派生類對象
lisi = Teacher('Li si', 32, 'man', 'Math')
lisi.show()
#調用繼承的方法修改年齡
lisi.setAge(40)
lisi.show()