我是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
替换_process_friendly_time
,那么我以后会收到错误消息...
TypeError: 'staticmethod' object is not callable
是否有一种语法可以让我做到这一点,还是必须将静态方法移到类之外?
答案 0 :(得分: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
]
但是请考虑使用静态方法是否会真正从中受益。人们经常出于习惯使用其他语言而使用它们,但是在这种情况下没有任何好处:独立的功能会更有意义。