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
笔记以下: