Извиняюсь, если у меня здесь неправильная терминология - я не могу думать, как бы назвали эту конкретную идиому.
Я пытался создать класс Python 3, который статически объявляет экземпляры себя внутри себя - вроде как enum будет работать. Вот упрощенная версия кода, который я написал:
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?