super關鍵字應用 lass Animal: # 動物 def __init__(self,name,aggr,hp): #方法 動態屬性 內置的雙下方法 self.name = name # 對象屬性 實例屬性 self.aggr = aggr self.hp = hp def eat(self): print('in Animal eat') class Person(Animal): # 類名 Person def __init__(self,name,sex,aggr,hp): self.sex = sex # 派生屬性 # Animal.__init__(self,name,aggr,hp) super().__init__(name,aggr,hp) # 單繼承中 super會尋找父類 # 且在使用super調用父類方法的時候不須要再傳self參數 def eat(self): print('in Person eat') Animal.eat(self) #alex.eat()=Person.eat(alex) # super().eat() alex = Person('alex','不詳',1,250) print(alex.__dict__) # Animal.eat(alex) # super(Person,alex).eat()
注意:spa
第一個要注意:對象
Animal.eat(self) 與 super().eat() 在person類中def eat()直接飲用繼承
因此super().eat()中super後面括號能夠省略it
而咱們若是在外面調用的時候,括號裏面不能直接省略(super(Person,alex).eat())class
第二個要注意:object
alex.eat()=Person.eat(alex) * 對象.方法名()=類名.eat(對象)循環
二:單繼承練習題方法
class A: def wahaha(self):print('in A') class B(A): def wahaha(self):print('in B') class C(B): def wahaha(self):print('in C') class D(C):pass # def wahaha(self):print('in D') d = D() d.wahaha() # 不要發生循環繼承 # 依賴倒置原則 : # 高層模塊不該該依賴低層模塊
注意:im
1若是調用子類屬性,子類沒有找父類,以此類推,不斷找父類。qq
2不能發生循環繼承
3 依賴倒置原則,高層模塊(D也就是最裏層)不該該依賴低層模塊(A最外層)
簡單的多繼承
class A:pass # def qqxing(self): # print('in A') class B: def qqxing(self): print('in B') class C: def qqxing(self): print('in C') class D(B,A,C): pass # def qqxing(self): # print('in D') d = D() d.qqxing()
按照D(B,A,C)按照BAC順序查找,若是一個出現Pass,往上找
注意:Python3中全部的類繼承object
新式類:一個類繼承object
經典類:一個類沒有繼承object
經典類沒有mro方法,新式類有
Python3纔有super
筆記以下: