Это действительно зависит от того, что вы хотите, но один из способов получить то, что вы, кажется, хотите, это сделать так.
class X:
a = 'hello'
def __init__(self, b):
self.b = b
@classmethod
def my_method(cls, c=None):
if c is None:
c = X.a
print('cls.a = {}'.format(cls.a))
print('c = {}'.format(c))
X.my_method()
Сделайте значение по умолчанию None
и проверьте наличие None
в теле функции, назначив c
, если будет установлено, что оно None
. Если вы когда-нибудь хотели, чтобы None
был допустимым аргументом для функции, тогда это не сработало бы, но это маловероятно.
Эта идиома часто используется в python, чтобы избежать изменяемого по умолчанию аргумента «подводные камни», но здесь он задерживает присваивание с X.a
до тех пор, пока X
не будет фактически определено.
Это также означает, что если вы измените X.a
, my_method
подберет новое значение. Вы можете или не можете этого хотеть.