将静态属性引用为python 3中另一个静态属性的初始化

时间:2019-03-27 11:23:34

标签: 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替换_process_friendly_time,那么我以后会收到错误消息...

TypeError: 'staticmethod' object is not callable

是否有一种语法可以让我做到这一点,还是必须将静态方法移到类之外?

1 个答案:

答案 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
]

但是请考虑使用静态方法是否会真正从中受益。人们经常出于习惯使用其他语言而使用它们,但是在这种情况下没有任何好处:独立的功能会更有意义。