首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中优雅的多重继承

Python中优雅的多重继承
EN

Stack Overflow用户
提问于 2013-07-12 16:01:39
回答 1查看 99关注 0票数 0

我目前正在使用此模式创建一个继承自AB的类C。我不能从C调用super().__init__,因为我必须在AB中执行相同的操作,并且意外的参数会在顶层引起问题。我觉得这不是很优雅。在Python中进行多重继承的正确方式是什么?我猜查询mro来确定超类是否需要一个参数是不寻常的?

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-12 17:59:37

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17610269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档