如果我在这里弄错了术语,我会道歉 - 我无法想象这个特定的习语是什么.
我一直在尝试创建一个Python 3类,它静态地声明自身内部的实例 - 有点像枚举可以工作.这是我写的代码的简化版本:
class Test:
A = Test("A")
B = Test("B")
def __init__(self, value):
self.value = value
def __str__(self):
return "Test: " + self.value
print(str(Test.A))
print(str(Test.B))
Run Code Online (Sandbox Code Playgroud)
写这个,我在第2行(A = Test("A")
)上得到了一个例外.我假设第3行如果它已经做到那么远也会出错.使用__class__
而不是Test
给出相同的错误.
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in Test
NameError: name 'Test' is not defined
Run Code Online (Sandbox Code Playgroud)
有没有办法在Python中引用静态上下文中的当前类?我可以在类之外或单独的类中声明这些特定变量,但为了清楚起见,我宁愿不知道是否可以帮助它.
为了更好地演示我正在尝试做什么,这里是Java中的相同示例:
public class Test {
private static final Test A = new Test("A");
private static final Test B = new Test("B");
private final String value;
public Test(String value) {
this.value = value;
}
public String toString() {
return "Test: " + value;
}
public static void main(String[] args) {
System.out.println(A);
System.out.println(B);
}
}
Run Code Online (Sandbox Code Playgroud)
这可以正常工作:它打印:
Test: A
Test: B
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中做同样的事情?
Aar*_*lla 13
定义类后,只需添加以下两行:
Test.A = Test("A")
Test.B = Test("B")
Run Code Online (Sandbox Code Playgroud)
Python中的类是一个与任何其他类似的对象,您可以随时添加新变量.你不能在类中完成它,因为它当时没有定义(只有在正确解析了类的整个代码之后才会将它添加到符号表中).