Python:在init中运行类的staticmethod?

时间:2018-08-25 11:47:24

标签: python oop

以下内容使我怀疑我想要的是类还是模块。

基本上,我正在构建各种解析器,一个API库。

我的代码连接到的外部服务每次发出请求时都需要一个令牌。

我已成功生成此令牌。但是,如果它不在类的__init__中,我不确定如何将该令牌“提供”给类实例。

到目前为止,我的代码:

class MBParser(object):
    pass

class SomeServiceParser(MBParser):

    '''instantiate and use me'''

    def __init__(self):
        self.token = _get_token()


    @staticmethod
    def _get_token():
      # code to get the token

1 个答案:

答案 0 :(得分:0)

您可以将每个需要新令牌的函数包装在装饰器中,如下所示:

def new_token(func):
    def wrapper(self, *args, **kwargs):
        self.token = SomeParser._get_token()
        r = func(self, *args, **kwargs)
    return wrapper

我在self方法中显式添加了一个wrapper参数,因为类中的方法仍然需要此参数。这样,我可以访问self.token属性并将其设置为新值

可以如下使用装饰器:

@new_token
def makeHTTPRequest(self, name):
    # ... make request and use self.token here