从 python3 中的 class 静态变量访问 Class 对象?

Access a Class object from a class static variable in python3?

是否可以从 python3 中的 class 静态变量访问 class 对象或其内部 class 对象?

class OuterClass:
    all_subclasses = {
        # is it possible to access the OuterClass from a class static variable
        'innerclass1': OuterClass.InnerClass1
    }
    @classmethod
    isInnerClass(cls, identifier: str):
        return identifier.lower() in cls.all_subclasses

    class InnerClass1:
        def __init__(self):
             pass

如果没有,有什么替代方案?

可以在class定义中直接引用class的属性,只要引用在定义之后:

class A:
    class B:
        pass
    x = B

print(A.x)
# <class '__main__.A.B'>

这有一些注意事项。 For reasons that are very complicated, 你不能在 class 定义的理解中直接使用 class 属性:

class A:
    class B:
        pass
    x = [B for _ in range(5)]  # NameError: name 'B' is not defined

您也不能在其自己的定义中引用 class 本身:

class A:
    x = A  # NameError: name 'A' is not defined

这是因为 class 定义基本上是另一种创建 type 对象的方法

class A:
    x = 1

A = type('A', (object,), {'x': 1})

您不能在对象创建之前使用它,也不能通过尚未分配给它的名称来引用它,这是完全有道理的。

请务必注意,这一切仅适用于 class 定义本身,也就是说,所有在创建 class 时直接执行的代码。稍后执行的代码,如方法定义,可以像任何其他代码一样引用 class 或通过 type(self)