相關內容: 繼承:多繼承、super、__init__、重寫父類變數或函數 多態 繼承: 在Python3中,不寫基類的類預設繼承object 繼承就是子類獲得了父類的全部功能:比如學生和老師都有“姓名,性別,年齡、ID”等學校人員屬性,如果學生和老師都直接繼承學校人員的“姓名,性別,年齡、ID”,... ...
相關內容:
繼承:多繼承、super、__init__、重寫父類變數或函數
多態
繼承:
- 在Python3中,不寫基類的類預設繼承object
- 繼承就是子類獲得了父類的全部功能:比如學生和老師都有“姓名,性別,年齡、ID”等學校人員屬性,如果學生和老師都直接繼承學校人員的“姓名,性別,年齡、ID”,那麼就不必要在學生類和老師類中重覆定義了。
- 繼承指定類的方式是:class 類名(基類名)
class SchoolPerson: def study(self): print("it's time to study") class Student(SchoolPerson):#繼承的方法 pass a=Student() a.study() ---------------------- 結果: it's time to study
上述結果顯示,Student繼承了SchoolPerson中的study函數
- python支持多繼承:class SubClassName (ParentClass1[, ParentClass2, ...]):
- 對象對於屬性【包括變數和函數】的查找路徑:本實例對象--》本類--》基類【如果有多個基類,從左到右到基類中查找】
- 可以調用基類的__init__方法:
class SchoolPerson: def __init__(self,name,age,sex,mid): self.name=name self.age=age self.sex=sex self.mid=mid def study(self): print("it's time to study") class Student(SchoolPerson):#繼承的方法 def __init__(self,name,age,sex,mid,grade): # super(Student,self).__init__(name,age,sex,mid) SchoolPerson.__init__(self,name,age,sex,mid) self.grade=grade def study(self): print("i am student,i want to study") a=Student('A',18,'m','001',1) a.study() print(a.name,a.age,a.mid,a.grade)
- 對於多繼承中的調用基類的__init__:無論多少個基類,也只會調用一次基類的__init__
- 可以覆蓋父類中屬性【變數、函數】:
class SchoolPerson: def __init__(self,name,age,sex,mid): self.name=name self.age=age self.sex=sex self.mid=mid def study(self): print("it's time to study") class Student(SchoolPerson):#繼承的方法 def __init__(self,name,age,sex,mid,grade): super(Student,self).__init__(name,age,sex,mid) self.grade=grade def study(self): print("i am student,i want to study") a=Student('A',18,'m','001',1) a.study() -------------------------- 結果: i am student,i want to study
多態:
- python是否具有多態具有爭議性。
- 但不論是否具有,這並不影響我們的具體使用。
class Animal: def __init__(self, name): self.name = name def talk(self): pass @staticmethod ####如果硬要說多態,建議使用靜態方法來處理,而非普通函數 def animal_talk(obj): obj.talk() class Cat(Animal): def talk(self): print('喵!') class Dog(Animal): def talk(self): print('wang') d = Dog("小黑") c = Cat("小白") # def animal_talk(obj): # obj.talk() ###這也是一個能實現功能的函數,因此python多態才具有爭議性 Animal.animal_talk(c) Animal.animal_talk(d)