Python: методы вызываются, когда используются как значения dict при создании dict - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу иметь dict диспетчера {str: method} с методами в нем.Я хочу перебрать ключи диспетчера и вызвать значение как метод, но когда я запускаю скрипт Python, методы запускаются сразу после создания dict:

from python.helper.my_client import Client

def deco_download(f):
    def f_download(*args, **kwargs):
        # some retry functionality here
        return json_data
    return f_download 

class Downloader:
    def __init__(self):
        self.attribute = 'some_value'

    @deco_download
    def download_persons(self, client, *args, **kwargs):
        return client.get_persons(*args, **kwargs)

    @deco_download
    def download_organizations(self, client, *args, **kwargs):
        return client.get_organizations(*args, **kwargs)

def run(self):
    dispatcher = {
        'person': self.download_persons(client),
        'organization': self.download_organizations(client)
    }

    for key in dispatcher:
        print("Downlading data for: {0}".format(key)
        dispatcher[key]

К сожалению, методы выполняются напрямую, когдадиктатор диспетчера инициализируется прежде, чем я вызову их в цикле for.Я ожидаю, что они будут вызваны в цикле for, а не во время создания dict.Что я здесь не так делаю?Это из-за декоратора, который я использую?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Просто не выполняйте функцию при создании dict:

def run(self):
    dispatcher = {
        'person': self.download_persons,
        'organization': self.download_organizations
    }

    for key in dispatcher:
        print("Downlading data for: {0}".format(key)
        dispatcher[key](client) # execute the function here
0 голосов
/ 27 сентября 2018

Они вызваны, потому что вы звоните им.Не делай этого;поставьте призывные звания в поле

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