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

Python多继承场景下子类如何访问父类同名属性并完成赋值输出

错误原因

  • 多继承逻辑理解错误:子类继承父类是直接获得父类的属性方法,而非在子类中生成name_1、name_2两个父类实例属性,因此self.name_1.name1的写法不成立
  • super().__init__()未传参,且默认只会调用方法解析顺序(MRO)中排第一位的父类name_1的构造方法,不会自动调用两个父类的构造
  • 两个父类的实例属性都叫name1,即便同时调用两个父类构造,后调用的父类属性会覆盖前面的同名属性
  • id是Python内置函数名,不建议作为自定义类名使用,避免命名冲突
  • 补充注意:代码中的^是按位异或运算符,如果想要计算平方需要用**运算符

正确实现代码

# 父类定义,类名遵循大驼峰规范,调整第二个父类的属性名避免冲突
class Name1:
    def __init__(self, name1):
        self.name1 = name1

class Name2:
    def __init__(self, name1):
        self.name2 = name1

# 替换原id类名,避免和Python内置id函数冲突
class UserInfo(Name1, Name2):
    def __init__(self, no, name_a, name_b):
        self.no = no
        # 显式调用两个父类的构造方法,分别传入对应参数
        Name1.__init__(self, name_a)
        Name2.__init__(self, name_b)
    
    def pid(self):
        # 若要计算平方请改为 print(self.no ** 2)
        print(self.no ^ 2)
    
    def names(self):
        # 直接拼接继承自两个父类的属性,需要中间加空格可以改为 return self.name1 + ' ' + self.name2
        return self.name1 + self.name2

obj1 = UserInfo(12, "dwayne", "johnson")
print(obj1.names())

运行后输出结果为dwaynejohnson,符合需求。

内容的提问来源于stack exchange,提问作者Niranjan K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:03