gpt4 book ai didi

Python多重继承/混合

转载 作者:太空狗 更新时间:2023-10-30 00:04:04 26 4
gpt4 key购买 nike

我有以下问题:

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__()

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

最佳答案

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

class C(CapitalizeAnimal, A):
animal = 'puma'

def __init__(self):
super(C, self).__init__()

更多信息可以通过阅读 MRO 找到。 (方法解析顺序)。


此外,super 仅适用于 new style classes ,所以你应该让 A 继承 object (当然除非你使用的是 Python 3)。

关于Python多重继承/混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com