我是python的新手,所以请原谅从其他语言中窃取的命名法。我有一个包含“静态”属性(列表)和静态方法的类。我想初始化param以仅包含对方法的引用:
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
是否有一种语法可以让我这样做,或者我必须将静态方法移到课外吗?
你不能在定义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
]
但是考虑一下你是否真的从使用静态方法中获得任何好处。人们经常使用它们来自其他语言的习惯,但在这种情况下没有任何好处:独立的功能会更有意义。