Инициализация переменной класса в python
У меня есть класс с переменной, которая должна быть экземпляром этого класса. Я не могу создать экземпляр в строке объявления, потому что интерпретатор python не знает, как создать объект в данный момент. Существует возможный обходной путь: инициализация после объявления класса.
class A(object):
static_variable = None
def some_method(self, a=static_variable):
print a
A.static_variable = A()
Но мне нужно использовать эту переменную класса в качестве аргумента по умолчанию. Решить проблему можно так:
def some_method(self, a=None):
a = a if a else A.static_variable
print a
Тем не менее, это выглядит очень не пифонично для меня. Будем благодарны за любые предложения о том, как использовать этот тип статической переменной в качестве аргумента по умолчанию.
1 ответ
Python не поддерживает "статические" переменные в том смысле, как это делают языки, подобные C++. Так что в этом случае static_variable - это на самом деле переменная класса, поэтому вы столкнулись с этой проблемой. Я уверен, что вы уже знаете это, но другие могут когда-нибудь наткнуться здесь и увидеть, как мы называем это статической переменной, так что кажется, что мы должны это выяснить для потомков.
Я думал, что поскольку static_variable все еще является членом класса A, возможно, был выход из положения, вообще не использовав его в качестве аргумента.
Можете ли вы использовать аргумент ключевого слова в some_method()?
вместо того, чтобы использовать его в качестве аргумента по умолчанию для функции, вы можете просто вызвать переменную "A.static_variable", если kwarg не использовался.
class A(object):
static_variable = None
def some_method(self, *, a=None):
if a:
print(a)
else:
print(A.static_variable)
A.static_variable = A()