У меня есть один класс с конструктором, который получает две функции в качестве функции обратного вызова.
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 помещается, когда я передаю метод .