Я лично держать my_func()
вне класса. Конечно, он может использоваться только для определения класса, но если он не полезен после определения класса, он не должен быть частью API класса.
Если функция my_func()
должна использоваться вместе с классом даже после создания класса, то вы все равно можете сделать эту работу с MyClass.my_func()
статическим методом. В этом случае определить функцию первого перед установкой переменного класса:
class MyClass():
@staticmethod
def my_func():
pass
class_variable = my_func.__func__()
@staticmethod
не является строго необходимым, как в то время class_variable
устанавливается, my_func
еще локальное имя в теле определения класса.
Однако, поскольку вы являетесь , используя это как статическая функция в любом случае, вы можете также отметить это как таковое. Преимущество состоит в том, что теперь работает и MyClass.my_func()
.
Поскольку @staticmethod
не будет связываться вне контекста атрибута класса или экземпляра, вам необходимо сначала распаковать его, обратившись к завернутой функции с помощью атрибута __func__
.
Демо:
>>> class MyClass():
... @staticmethod
... def my_func():
... return 'foobar'
... class_variable = my_func.__func__()
...
>>> MyClass.class_variable
'foobar'
>>> MyClass.my_func()
'foobar'