为什么这样做:
class A:
class BError(Exception):
pass
class CError(AError):
pass
但这不是:
class A:
class BError(Exception):
pass
class CError(A.BError):
pass
如果“方法1”适用于调用类变量,为什么它不适用于“类类”
答案 0 :(得分:0)
编译时,python构建类,然后将其分配给封闭命名空间中的命名变量。在第一个示例中(假设您的确意味着class CError(BError)
),BError
已经编译并分配给A
类名称空间,因此它对于下一个类是可见的。但在第二个示例中,尚未将顶级类分配给全局A
变量,因此无法找到A.BError
。
问题可以表现为:
>>> class A:
... print('A' in globals())
...
False
>>> print('A' in globals())
True
>>>