在Python中的所述类内创建类的静态实例


问题内容

抱歉,如果我在这里用错了术语-我想不出这个特定的习惯用法是什么。

我一直在尝试创建一个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))

编写此代码后,第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

有什么方法可以在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);
    }
}

如您所料,它可以正常工作:打印:

Test: A
Test: B

如何在Python中做同样的事情?


问题答案:

定义类后,只需添加以下两行:

Test.A = Test("A")
Test.B = Test("B")

Python中的类是一个与其他对象一样的对象,您可以随时添加新变量。您无法在类内完成此操作,因为当时尚未定义(只有在正确解析了该类的整个代码之后,它才会添加到符号表中)。