
比如这个代码
class Bird: #鸟有翅膀 def isWing(self): print("鸟有翅膀") #鸟会飞 def fly(self): print("鸟会飞") class Ostrich(Bird): # 重写 Bird 类的 fly()方法 def fly(self): print("鸵鸟不会飞") # 创建 Ostrich 对象 ostrich = Ostrich() #调用 Ostrich 类中重写的 fly() 类方法 ostrich.fly() 父类 bird 中有一个 fly()方法,子类 Ostrich 继承了 bird 类, 子类 Ostrich 中的 fly()方法会覆盖父类 bird 中的 fly()方法,这个如何避免, 我想让子类 Ostrich 中的 fly()方法不覆盖父类 bird 中的 fly()方法,
我想修改父类的内容, 因为父类被很多地方调用了
1 imn1 2022 年 3 月 21 日 类内 super().fly() 类外 Bird().fly() |
2 JeffGe 2022 年 3 月 21 日 via Android 我不确定我是否明白你的意思,你可能对“覆盖”这个词有误解,子类 Ostrich.fly 方法并不会替换掉 Bird.fly 方法,只是 Ostrich 实例在调用 fly 方法时会优先寻找 Ostrich.fly 方法并调用,从而“覆盖”或者说“屏蔽”了 Bird.fly 方法,其它继承 Bird 类的子类不会受到 Ostrich 方法重载的影响 |
3 ZztGqk 2022 年 3 月 21 日 话说这不是叫重写( Override )么。还有应该需要先理解一下多态。 |
4 omtow 2022 年 3 月 21 日 via iPhone 你可以了解下 Python 的 MRO (Method Resolution Order),可能会对你有帮助 |
5 BeautifulSoap 2022 年 3 月 21 日 1. LZ 你可能误解了“重载”这个词的意思,建议学习下(不如说 python 就没有重载这个概念) 2. lz 问题的答案: :super(Bird, ostrich).fly() |
6 ixuuux 2022 年 3 月 21 日 via iPhone 在 print(“鸵鸟不会飞”)的上面,加上一句 super().fly()。会完整执行父类的 fly() |
7 Leviathann 2022 年 3 月 21 日 不会修改被继承的类的。。 |
8 4BVL25L90W260T9U 2022 年 3 月 22 日 现在已经不流行 inheritance 了,更倾向于 composition 。 |
9 lizytalk 2022 年 3 月 22 日 用 super 是正解,只是你写的不对而已,楼上的几位老哥说的很对。 这个不叫重载,重载是 overload ,这个是 override |