我知道那里有很多类似的问题。但我的问题不同。 我不想做一个不能被覆盖的方法。 我想保护我新创建的类不会意外覆盖某些东西。
使用下划线作为前缀非常好,但很快我就会得到很多带有很多下划线的方法。在我继承的类的某个地方,我将覆盖祖辈的类方法。
我真正想要的是这样简单的东西:
class Cat(Mammal):
def walk(self):
if ancestor_has_function('walk'):
parent.walk();
do_something_here();
如果 Cat 的任何祖先(哺乳动物、动物或 LifeForm)具有“walk”方法,则应首先执行父方法。
这有可能在python中做到这一点吗?
编辑: 例如,这是我认为不错的答案的简历。希望这对其他人有帮助:
class Animal(object):
pass
#def walk(self):
# print('animal walk')
class Mammal(Animal):
def walk(self):
if hasattr(super(Mammal, self), 'walk') and callable(super(Mammal,self).walk):
super(Mammal, self).walk()
print('mammal walk')
class Cat(Mammal):
def walk(self):
super(Cat, self).walk()
print('cat walk')
if __name__ == '__main__':
cat = Cat()
cat.walk()
这是输出:
哺乳动物步行
猫步
尝试取消注释 Animal 的 walk 方法,你也会让它工作。