Использование метода класса в качестве обратного вызова в Python - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть один класс с конструктором, который получает две функции в качестве функции обратного вызова.

class TreeTraverse:
    def __init__(self, branch_head: Node, node_processor: Callable[[Phrase], None], ascent: Callable[[], None]):
        self._branch_head: Node = branch_head
        self._ascent: Callable[[], None] = ascent
        self._node_processor: Callable[[Phrase], None] = node_processor
        ...

Я аннотировал параметры с помощью модуля ввода: один из них должен получить 1 параметр, другой - без параметров. Затем у меня есть другой класс, который передает их методы в качестве обратных вызовов:

class CodeGenerator:
    def phrase_processor(self, phrase: Phrase):
        pass

    def asc(self):
        pass

    def generate(self):
        tree_traverse = TreeTraverse(self._tree.get_head(), node_processor=self.phrase_processor, ascent=self.asc)
        tree_traverse.traverse()

Вопрос в том, почему этот код работает? Разрешено ли оставлять как есть?

Метод класса имеет дополнительный аргумент "self" в первой позиции. И в том месте, где вызывается функция, я должен передать экземпляр класса этому методу. Но кажется, что это не обязательно.

Я предполагаю, что все в python - это объект (включая функции и методы), и у этого объекта есть sta sh, где self помещается, когда я передаю метод .

...