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 class)如何调用 super() 函数感到困惑。
2 个回答
0
首先,如果B
和C
的唯一操作只是调用父类的__init__
,那么它们就不需要自己写__init__()
。
关于你的问题:你有没有试过写成class C(A, CapitalizeAnimal):
或者class C(A, CapitalizeAnimal):
?也就是说,去掉#
和?
?