在多重继承中访问超类方法的更好方法

Kra*_*mar 7 python

class Animal(object):
    def eat(self):
        print("I eat all")

class C(object):
    def eat(self):
        print("I too eat")

class Wolf(C, Animal):
    def eat(self):
        print("I am Non Veg")
        super(Wolf, self).eat()
        Animal.eat(self)

w = Wolf()
w.eat()
Run Code Online (Sandbox Code Playgroud)

我正在学习python中的多重继承,我想使用方法从派生类访问Animal和方法.Ceatsuper

super内部调用C 类方法的默认调用eat,但调用Animal我使用的类方法.Animal.eat(self)我的问题是如何Animal使用super方法调用类方法.

Mik*_*ham 6

如果你想做一个理智的多重继承,你需要每个人都要调用,super除了一个基类,它的职责是不要调用super.使用相同的方法拥有两个完全独立的基类并不是使用OOP理论有意义的事情,并且不是Python具有良好处理工具的东西.

您可能会在很多示例中看​​到两个显然独立的基类,但在这些情况下,示例方法通常是__init__,并且它的单个非超级调用基类是object.

  • “使用 OOP 理论来说,拥有两个完全独立的基类并具有相同的方法是没有意义的,Python 也没有工具可以很好地处理这种情况。” 那么尝试装饰行为的 mixin 又如何呢? (4认同)
  • 爱你的回复. (2认同)