Выполнить функцию только один раз в классе - Python - PullRequest
0 голосов
/ 18 декабря 2018

Я пишу класс для извлечения данных из некоторых файлов и записи их в базу данных postgres.Теперь проблема в том, что для каждого экземпляра я извлекаю некоторую информацию из базы данных, которая является постоянной для всех остальных экземпляров.

Итак, я хотел бы просто запустить функцию / фрагмент кода после создания моего первого объекта, и эта функция (или код) будет извлекать эту информацию из базы данных.Затем я хочу, чтобы мои другие экземпляры могли получить доступ к этой информации вместо того, чтобы постоянно запрашивать базу данных снова и снова, поскольку эта информация постоянна.Я думал в направлении переменных класса, декораторов.Я проходил через pytest, где у них есть приспособления с областью действия (@ pytest.fixture (scope = 'module')), где мы можем поместить код, который необходимо запустить один раз, а затем другие функции, которые мы тестируем, могут использовать эту информацию.

Может кто-нибудь помочь, как этого достичь?

1 Ответ

0 голосов
/ 18 декабря 2018

Для этого вы можете использовать атрибут класса и проверить, установлен ли он уже в конструкторе вашего класса:

class MyClass(object):
    postgres_data = None:

    def __init__(self):
        if not MyClass.postgres_data:
            MyClass.postgres_data = self.fetch_data()

    def fetch_data(self):
        pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...