You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多继承问题:无法访问第二个父类的属性与方法求助

解决Python多继承中无法访问第二个父类属性的问题

你的问题出在多继承时仅调用了第一个父类的构造方法,导致第二个父类的属性没有被初始化。

问题原因

在Python中,super().__init__()会按照类的MRO(方法解析顺序)调用父类构造方法。对于Student(Person1, Person2),它的MRO顺序是Student → Person1 → Person2 → object。但你的Person1类的__init__没有调用super().__init__(),所以Person2的__init__不会被自动执行,对应的属性自然无法访问。

解决方案:显式调用所有父类的构造方法

直接在子类的__init__中分别调用每个父类的构造方法并传入self参数,确保所有父类的属性都被初始化:

class Person1:
    def __init__(self) -> None:
        self.john_name = "John"
        self.john_age = 36

    def get_name_john(self) -> str:
        return self.john_name

    def get_age_john(self) -> int:
        return self.john_age


class Person2:
    def __init__(self) -> None:
        self.ted_name = "Ted"
        self.ted_age = 32

    def get_name_ted(self) -> str:
        return self.ted_name

    def get_age_ted(self) -> int:
        return self.ted_age


class Student(Person1, Person2):
    def __init__(self) -> None:
        # 显式调用每个父类的构造方法
        Person1.__init__(self)
        Person2.__init__(self)
        print(self.john_age)
        print(self.ted_age)
        print(self.get_name_john())
        print(self.get_name_ted())
        print(self.get_age_john())
        print(self.get_age_ted())


student = Student()

运行这段代码后,就能正常访问两个父类的所有属性和方法。

补充:协作式多继承写法(可选)

如果希望用super()实现规范的多继承协作,需要让所有父类的__init__都调用super(),这样MRO链上的所有构造方法都会被依次执行:

class Person1:
    def __init__(self) -> None:
        super().__init__()
        self.john_name = "John"
        self.john_age = 36

    # 方法省略...

class Person2:
    def __init__(self) -> None:
        super().__init__()
        self.ted_name = "Ted"
        self.ted_age = 32

    # 方法省略...

class Student(Person1, Person2):
    def __init__(self) -> None:
        super().__init__()  # 按MRO依次调用Person1、Person2的__init__
        # 后续print代码不变

这种写法更符合Python新式类的多继承规范,但需要所有父类都遵循协作调用的约定。

内容的提问来源于stack exchange,提问作者Antonio Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:05:21