使用 super() 时不调用 Python 多重继承构造函数

标签 python oop inheritance python-3.x multiple-inheritance

考虑以下代码:

class A(object):
    def __init__(self):
        pass
class B(object):
    def __init__(self):
        self.something = 'blue'
    def get_something(self):
        return self.something
class C(A,B):
    def __init__(self):
        super().__init__()
        print(self.get_something())

然后做:

c = C()

结果是这样的:

AttributeError: 'C' object has no attribute 'something'

我想这是因为在使用 super() 时没有调用 B 的构造函数。有没有办法用 Python 3 实现正确的行为?

最佳答案

如果子类使用 super,则父类(super class)应该使用 super。如果将 super().__init__() 行添加到 A 和 B 中,您的示例应该再次运行。

检查C:的方法解析顺序

>>> C.mro()
[__main__.C, __main__.A, __main__.B, builtins.object]

This article应该把事情弄清楚。

关于使用 super() 时不调用 Python 多重继承构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25372653/

相关文章:

oop - 模块化游戏引擎的例子?

java - 我可以将 ActionListener 添加到 jFrame 中的按钮并在不同的类中使用 actionPerformed 方法吗?

ruby - 如何找到 "essential"方法来提供 Ruby mixins 的接口(interface)?

python - 如何自定义 FastAPI 请求体文档

python - 在没有列表理解、切片或使用 [ ] 的情况下替换列表中的元素

python - fcntl.lockf() 以何种方式锁定文件?

java - 面向对象编程,将参数传递给方法比在构造函数中更面向对象吗?

通过谷歌模块的 Python 搜索给出 SSL : CERTIFICATE_VERIFY_FAILED Error

java - 是否可以将一个上下文注入(inject)到另一个上下文中?

java - 如何连接两个不同的类