atp*_*atp 6 python multiple-inheritance
我有以下问题:
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__()
Run Code Online (Sandbox Code Playgroud)
现在,我想要一组来自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__()
Run Code Online (Sandbox Code Playgroud)
我如何class C实现CapitalizeAnimal版本calculate_animal,同时保持其动物puma?我对Mixin类如何调用super()函数感到困惑.
父类的顺序很重要,你应该这样做:
class C(CapitalizeAnimal, A):
animal = 'puma'
def __init__(self):
super(C, self).__init__()
Run Code Online (Sandbox Code Playgroud)
通过阅读MRO(方法解析顺序)可以找到更多信息.
此外,super仅适用于新样式类,因此您应该进行A继承object(当然,除非您使用的是Python 3).
| 归档时间: |
|
| 查看次数: |
9642 次 |
| 最近记录: |