Skip to main content
 首页 » 编程设计

默认为 'grandparent' 类实现的 Python 模式

2025年05月04日7kevingrace

class Thing(object): 
  def sound(self): 
    return '' #Silent 
 
class Animal(Thing): 
  def sound(self): 
    return 'Roar!' 
 
class MuteAnimal(Animal): 
   def sound(self): 
    return '' #Silent 

MuteAnimal 的声音在 python 中是否有一个模式来引用其祖父类 Thing 的实现? (例如 super(MuteAnimal,self).super(Animal.self).sound() ?)或者 Mixin 是一个更好的用例吗?

请您参考如下方法:

如 Alexander Rossa 所说在 Python inheritance - how to call grandparent method? :

There are two ways to go around this:

Either you can use explicitly A.foo(self) method as the others have suggested - use this when you want to call the method of the A class with disregard as to whether A is B's parent class or not:

class C(B):   def foo(self): 
    tmp = A.foo(self) # call A's foo and store the result to tmp 
 
return "C"+tmp  

Or, if you want to use the .foo() method of B's parent class regardless whether the parent class is A or not, then use:

class C(B):   def foo(self): 
    tmp = super(B, self).foo() # call B's father's foo and store the result to tmp 
    return "C"+tmp