Код с использованием переменной, такой как функция / метод с ()? - PullRequest
0 голосов
/ 27 мая 2020

Я смотрю на существующую базу кода, которая использует переменную типа bool в качестве метода, например:

class Manager(object):

    def __init__(self):
        self._on_elect_callback = None
        self._on_revoke_callback = None
        self.... = ... (..., event_listener = self._event)

    def _event(self, type):
        on_elect_callback = self._on_elect_callback
        if type == SOME_CONSTANT:
            ....
            if on_elect_callback:
                on_elect_callback()

    def do_this(self, on_elect_function):
        self._on_elect_callback = on_elect_function
        if self....:
            on_elect_function()

Вопросы:

  1. Мне любопытно как этот on_elect_callback используется как функция с () после if условия в последней строке. Разве это не какая-то логическая переменная? Я искал репо, и для этого нет определения. Что он делает?

  2. Кроме того, я хотел бы установить переменную в __init__, которую функция обратного вызова события может использовать, например, «эй, этот тип события IS SOME_CONSTANT, поэтому установите переменная от __init__ до "ABCD" (или True), как я могу этого добиться? Как это сделать?

1 Ответ

1 голос
/ 27 мая 2020

Вероятно, self._on_elect_callback будет назначена функция, как в self._on_elect_callback = lambda: "I'm a function". Я думаю, что причина, по которой вы думаете, что это должна быть переменная, заключается в том, что она используется в выражении if. Причина в том, что если self._on_elect_callback назначена функция, выражение будет оценивать как True, поскольку функции поддерживают метод bool, который по умолчанию возвращает True. Что касается Q2, конечно, вы можете, функции являются объектами в python, поэтому вы можете передать их функциям более высокого порядка или назначить их как переменные, как в примере

class Manager(object):

    def __init__(self, function):
        self._on_elect_callback = function # here we assigned the given function
        if not function: 
            # here we define a default attribute using an anonymous function
            self._on_elect_callback = lambda: "Default Function"

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