Dav*_*ver 24 python multiple-inheritance
如果我有三个这样的课程:
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):
???
Run Code Online (Sandbox Code Playgroud)
什么是初始化的正确方法MixinClass和BaseClass?
它看起来不像我可以使用,super因为它MixinClass和BaseClass两者都接受不同的参数......而且,两次调用,MixinClass.__init__(...)并且BaseClass.__init__(...),可能会导致钻石继承问题super被设计为阻止.
Chr*_* B. 13
基本上,在Python中,您不能安全地支持这种类型的继承.幸运的是,你几乎从不需要,因为大多数方法都不关心什么是什么,只是它支持特定的接口.您最好的选择是使用合成或聚合:让您的类继承其中一个父类,并包含对第二个类的实例的引用.只要您的类支持第二个类的接口(并将消息转发到包含的实例),这可能会很好.
在上面的示例中(两个类都继承自object),您可以(可能)安全地从两个类继承并使用MixinClass.__init__和调用两个构造函数BaseClass.__init__.但请注意,如果父类super在其构造函数中调用,则不安全.一个好的经验法则是super在父类使用时使用super,__init__如果父类使用__init__,并希望你永远不会从两个选择不同初始化方法的类继承.