首页 > 解决方案 > python循环继承,覆盖类声明

问题描述

试图了解 Python 如何创建一些类

class A:
    pass

class B(A):
    pass

class A(B):
    pass

a = A()

由于循环依赖,我期待一些错误,但它没有抱怨。

A.__mro__印刷(__main__.A, __main__.B, __main__.A, object)

所以看起来有两个类叫做A. 我期待第二个声明覆盖第一个声明。

谁能详细解释这里发生了什么?头等舱A可以到达吗?

标签: pythonclass

解决方案


没有循环继承:您创建了三个类。第一个是第二个的基类,第二个是第三个的基类。第三个与第一个 (A) 具有相同的名称,因此全局名称 A 现在指的是第三个。就像重新分配变量一样。

是的,第一个是可以访问的,因为正如您已经指出的那样,它位于A.__mro__. 因此,如果您愿意,您可以这样做:

old_A = A.__mro__[2]

推荐阅读