Python Проблема с вызовом функции (Общие) - PullRequest
0 голосов
/ 10 июля 2020

Мне нужно вызвать задачу чата обновления синхронно / асинхронно c на основе переменной flag. У меня есть примерно такой код:

class UpdateChat:

    def __init__(self, is_async=True):
        self._async = is_async

    def update(self):
        parse_call = self._parse_async if self._async else self._parse_sync
        parse_call(utterance,dynamic_concepts,cache_id_str)
        # This should have ideally mapped correctly with function parameters of _parse_sync & _parse_async
        # But somehow: 
        #  - utterance is being mapped with dynamic_concepts
        #  - dynamic_concepts with  cache_id_str
        # cache_id_str not being mapped at all
     
     def _parse_sync(self, utterance, dynamic_concepts=None, cache_id_str=None):
        pass
        
      def _parse_async(self, utterance, dynamic_concepts=None, cache_id_str=None):
        pass

Функция обновления не отображает параметры, передаваемые в parse_call, правильно (как указано в комментариях выше)

Два вопроса, если можно :

  • Почему это происходит?
  • Это правильный способ реализации таких функций (с точки зрения шаблона проектирования?) Следует ли нам использовать интерфейс (Python AB C) или что-то еще помимо таких сопоставлений?

1 Ответ

0 голосов
/ 10 июля 2020

Код работает, как ожидалось!

class UpdateChat:

    def __init__(self, is_async=True):
        self._async = is_async

    def update(self):
        utterance = "Hello"
        dynamic_concepts = "foo"
        cache_id_str = "bar"
        parse_call = self._parse_async if self._async else self._parse_sync
        parse_call(utterance,dynamic_concepts,cache_id_str)

    def _parse_sync(self, utterance, dynamic_concepts=None, cache_id_str=None):
        print(utterance, dynamic_concepts, cache_id_str)

    def _parse_async(self, utterance, dynamic_concepts=None, cache_id_str=None):
        pass

x = UpdateChat(False)
x.update()

Вывод:

Hello foo bar

Отображение функции в порядке. Однако вы можете вызвать методы _parse_syn и _parse_asyn c непосредственно из update (self).

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