类的继承
# # python3默认是广度优先,先找自己的方法或属性,如果没,往父类找 # class Animal: # def __init__(self): # print('执行Animal.__init__') # self.func() # # def eat(self): # print('%s eating' %self.name) # # def drink(self): # print('%s drinking' % self.name) # # def func(self): # print('Animal.func') # # class Dog(Animal): # def guard(self): # print('guarding') # # def func(self): # 重写父类方法,派生方法 # print('Dog.func') # # class Bird(Animal): # def __init__(self, name): # # Animal.__init__(self) # 父类名.方法名 需要自己传self参数 # super().__init__() # super().方法名 不需要自己传self,这是新式类 # self.name = name # 派生属性 # def lay(self): # print('laying') # # # # print(Dog.__bases__) # 查看父类 # # dog = Dog() # 这里Dog没有init方法,会调用父类的init # bird = Bird('ssss') # # bird.lay() # bird.drink() # # bird.eat()
# 新式类默认广度优先,经典类是深度优先 # super 只在python3中存在 # super的本质 :不是单纯找父类 而是根据调用者的节点位置的广度优先顺序来的 class A: def func(self): print('A') class B(A): pass def func(self): super().func() print('B') class C(A): pass def func(self): super().func() print('C') class D(B, C): pass def func(self): super().func() print('D') d = D() d.func() print(B.mro())
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步