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
相关产品推荐
相关产品推荐

