繁体   English   中英

Python:多重继承中的共享方法和属性

[英]Python: shared methods and attributes in multiple inheritance

我只是想创建一个从两个父级继承属性和方法的类。 假设两个父类是

class A(object):
    def __init__(self, a):
        self.a = a

    def method_a(self):
        return self.a + 10


class B(object):
    def __init__(self, b):
        self.b = b

    def method_b(self):
        return self.b + 20

然后我不知道如何创建一个从其父类继承方法和属性的子类 C。 我可以做这样的事情,但我很确定这不是很pythonic......

class C(A, B):
    def __init__(self, a, b):
        A.__init__(self, a=a)
        B.__init__(self, b=b)

那么我可以毫无问题地做到这一点

my_class = C(a=1, b=2)
print(my_class.a)
print(my_class.b)
print(my_class.method_a())
print(my_class.method_b())

我不知道如何设置super来继承父母双方的方法和属性,我将不胜感激! 顺便说一句:A 类和 B 类不应相互依赖。

据我所知, super工作方式是,根据子类开头声明的超类列表,计算出一个mro (方法解析顺序)列表。 当您调用supper (Python 3) 时,将调用mro列表中第一个类的__init__ __init__也应该包含另一个super()以便mro下一个类的__init__也被调用。

在您的情况下, mro列表应该是[A, B] 所以A__init__必须包含对super的调用,以便B__init__也被调用。

这里的问题是:

  • 您希望AB不相互依赖。 super的使用需要一个mro列表,它不能满足我上面解释的这个要求。
  • C__init__有 2 个参数,而AB只有 1 个。您可以将a传递给A但我不知道是否有办法将b传递给B

所以在我看来super在这种情况下无能为力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM