Python: запустить статический метод класса в init? - PullRequest
0 голосов
/ 25 августа 2018

Следующее заставляет меня подозревать, нужен ли мне класс или модуль.

В основном я создаю своего рода синтаксический анализатор, библиотеку 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 голосов
/ 25 августа 2018

Вы можете обернуть каждую функцию, для которой требуется новый токен, в декораторе, как показано ниже:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...