【问题标题】:Subclassing a user-defined exception in a user-defined class in Python在 Python 中的用户定义的类中子类化用户定义的异常
【发布时间】:2018-04-15 17:07:34
【问题描述】:

为什么会这样:

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

但这不是:

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

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

【问题讨论】:

  • 第一个例子中没有AError
  • 类对象只有在它们的整个类语句被执行后才会被创建。

标签: python class oop object subclass


【解决方案1】:

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

问题可以表示为:

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

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 2022-08-18
    • 2020-07-15
    • 2011-08-30
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多