0

我目前正在使用这种模式来创建一个C继承自Aand的类B。我无法调用super().__init__from ,C因为我必须在Aand中执行相同的操作B,并且意外参数会导致顶层出现问题。我觉得这不是很优雅。在 Python 中进行多重继承的正确方法是什么?我想查询mro超类是否需要参数是不寻常的?

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

    def method_a(self):
        self.a.go()

    def method_ab(self):
        self.a.go2()


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

    def method_b(self):
        self.b.go()

    def method_ab(self):
        self.b.go2()


class C(A, B):
    def __init__(self, something):
        self.a_ = A(something)
        self.b_ = B(something)

    @property
    def a(self):
        return self.a_.a

    @property
    def b(self):
        return self.b_.b

    def method_ab(self):
        for x in [self.a, self.b]:
            x.method_ab()
4

1 回答 1

1

我发现的最佳解决方案是使用基类来吸收额外的参数:

class Base:
    def __init__(self, something):
        pass

    def method_ab(self):
        pass

class A(Base):
    def __init__(self, something):
        super().__init__(something)
        self.a = X(something)

    def method_a(self):
        self.a.go()

    def method_ab(self):
        super().method_ab()
        self.a.go()


class B(Base):
    def __init__(self, something):
        super().__init__(something)
        self.b = X(something)

    def method_b(self):
        self.b.go()

    def method_ab(self):
        super().method_ab()
        self.b.go()


class C(A, B):
    pass
于 2013-07-12T09:59:37.360 回答