Python多继承同名类属性优先级问题咨询
Python多继承中类属性的优先级问题
是的,在Python多继承场景下,第一个被声明的父类的类属性优先级确实更高,这背后是Python的「方法解析顺序(MRO)」在起作用——类属性的查找逻辑和方法完全一致,都会严格遵循这个顺序。
具体到你的例子:
- 当定义
class C(A, B)时,C的MRO列表是[C, A, B, object]。 - 访问
C.name时,解释器会按这个顺序逐层查找:先检查C自身有没有name属性,找不到就去父类A里找,一旦在A中找到'a'就直接返回结果,不会再继续往后查找B的name属性,所以B的name根本没机会被访问到,自然无法覆盖A的属性。
你可以通过打印类的__mro__属性验证这个顺序:
print(C.__mro__) # 输出结果:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
如果想让B的name生效,要么调整继承顺序把B放在前面(class C(B, A)),要么在C类自身定义name属性来显式覆盖父类的属性。
内容的提问来源于stack exchange,提问作者Matthias Burger
相关产品推荐
相关产品推荐

