从 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)
是否可以从 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)