gpt4 book ai didi

Python:当父类(super class)接受不同的参数时,正确的初始化方法?

转载 作者:IT老高 更新时间:2023-10-28 20:22:57 26 4
gpt4 key购买 nike

如果我有这样的三个类:

class BaseClass(object):
def __init__(self, base_arg, base_arg2=None):
...

class MixinClass(object):
def __init__(self, mixin_arg):
...

class ChildClass(BaseClass, MixinClass):
def __init__(self, base_arg, mixin_arg, base_arg2=None):
???

初始化MixinClassBaseClass的正确方法是什么?

看起来不像我可以使用 super 因为 MixinClassBaseClass 都接受不同的参数... 而两个调用,MixinClass.__init__(...)BaseClass.__init__(...),会导致菱形继承问题 super 旨在防止。

最佳答案

基本上,在 Python 中,you can't support this type of inheritance safely .幸运的是,您几乎不需要这样做,因为大多数方法不关心 什么 东西是什么,只关心它支持特定的接口(interface)。您最好的选择是使用组合或聚合:让您的类继承自其中一个父类,并包含对第二个类的实例的引用。只要您的类支持第二类的接口(interface)(并将消息转发到包含的实例),这可能会很好。

在上面的示例中(两个类都继承自 object),您可以(可能)安全地从两个类继承并使用 MixinClass.__init__ 调用两个构造函数和 BaseClass.__init__ .但请注意,如果父类调用 super,这样做是不安全的。在他们的构造函数中。一个好的经验法则是使用 super如果父类使用 super , 和 __init__如果父类使用 __init__ ,并希望您永远不会被困在必须从选择不同初始化方法的两个类中继承。

关于Python:当父类(super class)接受不同的参数时,正确的初始化方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029550/

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