#python #python-3.x
#python #python-3.x
Вопрос:
Я новичок в python, поэтому, пожалуйста, извините за терминологию, украденную из других языков. У меня есть класс, содержащий «статический» атрибут (список) и статический метод. Я хочу инициализировать параметр, чтобы он содержал только ссылку на метод:
class LogFilter(object):
@staticmethod
def _process_friendly_time(params):
# process params
pass
param_processors = [
LogFilter._process_friendly_time
]
# Later
for processor in LogFilter.param_processors:
processor(params)
Этот код вызывает ошибку
NameError: name 'LogFilter' is not defined`.
Но если я заменю LogFilter._process_friendly_time
на just _process_friendly_time
, то позже получу сообщение об ошибке…
TypeError: 'staticmethod' object is not callable
Есть ли синтаксис, который позволит мне это сделать, или я должен переместить статический метод за пределы класса?
Ответ №1:
Вы не можете ссылаться на LogFilter._process_friendly_time
в точке, предшествующей LogFilter
определению. На этапе, когда вы в данный момент объявляете param_processors
, вы находитесь на полпути к определению LogFilter
: определение еще не завершено.
Вы можете переместить объявление поля в после класса.
class LogFilter:
@staticmethod
def _process_friendly_time(params):
# process params
pass
LogFilter.param_processors = [
LogFilter._process_friendly_time
]
Но подумайте, действительно ли вы получаете какую-либо выгоду от использования статического метода. Люди часто используют их по привычке из других языков, но в этом случае нет никакой пользы: автономная функция имела бы больше смысла.