我有以下问题:
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__
, B
和C
不需要__init__()
。
对于你的问题:你试过class C(A, CapitalizeAnimal):
和/或class C(A, CapitalizeAnimal):
吗?例如,省略#
和?
?