Python多重继承/混合



我有以下问题:

class A:
    animal = 'gerbil'
    def __init__(self):
        self.result = self.calculate_animal()
    def calculate_animal(self):
        print(self.animal)
        return self.animal
class B(A):
    animal = 'zebra'
    def __init__(self):
        super(B, self).__init__()

现在,我想从a中获得一组特定的子类来实现一个新函数,该函数计算与动物不同的东西,如下所示:

class CapitalizeAnimal:
    def calculate_animal(self):
        self.animal = self.animal.upper()
        # I need to call some version of super().self.animal,
        # but how will this Mixin class know of class A?

class C(A, #CapitalizeAnimal?):
    animal = 'puma':
    def __init__(self):
        super(C, self).__init__()

如何让class C实现CapitalizeAnimal版本的calculate_animal,同时保持其动物为puma ?我对Mixin类如何能够调用super()函数感到困惑

父类的顺序很重要,您应该这样做:

class C(CapitalizeAnimal, A):
     animal = 'puma'
     def __init__(self):
         super(C, self).__init__()

更多信息可以通过阅读MRO(方法解决令)找到。


另外,super只适用于新样式类,所以你应该让A继承object(当然,除非你正在使用Python 3)。

首先,如果唯一的动作是调用超级__init__, BC不需要__init__()

对于你的问题:你试过class C(A, CapitalizeAnimal):和/或class C(A, CapitalizeAnimal):吗?例如,省略#? ?

最新更新