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

问题描述 投票:0回答:1

我是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

是否有一种语法可以让我这样做,或者我必须将静态方法移到课外吗?

python python-3.x
1个回答
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
]

但是考虑一下你是否真的从使用静态方法中获得任何好处。人们经常使用它们来自其他语言的习惯,但在这种情况下没有任何好处:独立的功能会更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.