Предположим, у меня есть класс со статическим методом, и я хочу, чтобы для свойства класса было установлено значение, которое возвращает этот метод:
class A:
@staticmethod
def foo():
return 12
baz = foo()
Но делая это, я получаю сообщение об ошибке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in A
TypeError: 'staticmethod' object is not callable
Я нашел способ обойти это:
class A:
class B:
@staticmethod
def foo():
return 2
baz = B.foo()
Но, например, если я напишу:
class A:
class B:
@staticmethod
def foo():
return 2
class C:
baz = B.foo()
Я также получаю сообщение об ошибке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in A
File "<stdin>", line 7, in C
NameError: name 'B' is not defined
Есть ли способ вызвать статические методы внутри класса при его объявлении? Почему 1-й и 3-й примеры кода не работают, а 2-й работает? Как интерпретатор Python обрабатывает такие объявления?