在Python中用户定义的类中对用户定义的异常进行子类化

时间:2018-04-15 17:07:34

标签: python class oop object subclass

为什么这样做:

class A:
    class BError(Exception):
        pass
    class CError(AError):
        pass

但这不是:

class A:
    class BError(Exception):
        pass
    class CError(A.BError):
        pass

如果“方法1”适用于调用类变量,为什么它不适用于“类类”

1 个答案:

答案 0 :(得分:0)

编译时,python构建类,然后将其分配给封闭命名空间中的命名变量。在第一个示例中(假设您的确意味着class CError(BError)),BError已经编译并分配给A类名称空间,因此它对于下一个类是可见的。但在第二个示例中,尚未将顶级类分配给全局A变量,因此无法找到A.BError

问题可以表现为:

>>> class A:
...     print('A' in globals())
... 
False
>>> print('A' in globals())
True
>>>