python基础 #007 继承,传递,多态
Python面向对象中继承,传递和多态是个非常重要的知识点,能够使得对象更具有共同性和多样性
1. 继承
-
子类继承父类,子类拥有父类的属性和方法
class Animal: def eat(self): print('吃') def drink(self): print('喝') def run(self): print('跑') # Animal为父类,dog 为 Animal 的子类 class dog(Animal): def bark(self): print('旺旺旺') # 子类继承父类的属性和方法 dog = dog() dog.run() dog.eat() # 子类拥有自己的属性和方法 dog.bark() >>> 跑 吃 旺旺旺
2. 传递
-
子类继承父类的父类,子类拥有父类的父类的属性和方法
可理解: 儿子像他爸也像他爷爷
class Animal: def eat(self): print('吃') def drink(self): print('喝') def run(self): print('跑') class dog(Animal): def bark(self): print('旺旺旺') class XiaoTianQuan(dog): def fly(self): print('我会飞') # 子类调用自己的方法 dog = XiaoTianQuan() #子类调用父类的方法 dog.fly() dog.bark() dog.eat() >>> 我会飞 旺旺旺 吃
3. 多继承
-
子类同时继承多个父类,同时拥有多个父类的属性和方法
# 尽量避免父类之间的方法/属性重名,若重名根据继承顺序执行重名方法/属性 class A: def test(self): print('aaaa') def first(self): print('A-------') class B: def object(self): print('bbbbb') def first(self): print('B-------') class D(A,B): pass d = D() d.test() d.object() d.first() >>> aaaa bbbbb A-------
4. MRO
查看子类的继承顺序
搜索属性/方法的顺序,先从自身找,再从父类.......基类, 没有则报错
class A:
def first(self):
print('A-------')
class B:
def first(self):
print('B-------')
class D(A,B):
pass
d = D()
d.first()
print(D.__mro__)
>>>
A-------
(<class '__main__.D'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
5. 多态
-
方法重写
class dog: def bark(self): print('旺旺旺') class XiaoTianQuan(dog): def bark(self): print('神犬,嗷嗷嗷') # 当父类的属性不满足子类时,可在子类中重写,覆盖父类的方法 dog = XiaoTianQuan() dog.bark() >>> 神犬,嗷嗷嗷 -
方法重构
保留父类的方法,添加功能
class dog: def bark(self): print('旺旺旺') class XiaoTianQuan(dog): # 当父类的方法不满足子类的需求,可以在父类的方法基础上增加功能 def bark(self): print('神犬') # 调用父类的方法 super().bark() print('我还会fei') dog = XiaoTianQuan() dog.bark() >>> 神犬 旺旺旺 我还会fei
本文来自博客园,作者:{枫_Null},转载请注明原文链接:https://www.cnblogs.com/fengNull/articles/16622599.html

浙公网安备 33010602011771号