Есть ли возможность отловить вызов метода в Python?

Приветствую! В связи с динамическим обновлением класса на Python, мне необходимо отлавливать вызов метода у класса. То есть к классу Executor (см. ниже) будет добавлен новый метод из другого участка кода.

class Executor:
    def __init__(self, args): self.args = args 
    def checker(self) -> bool | list[str|int]: 
        if len([*self.args]) == 0: # args = dict(), при использовании [*self.args] получается список ключей
            return False

Далее, из-за того, что класс постоянно обновляется, я не могу вызвать метод checker у класса Executor в новом добавленном методе.

Моя задача: узнать, что срабатывает инициатором вызова метода в питон. То есть, есть ли метод, который запускает нужный мне метод у экземпляра класса (объекта)? Подробнее: как только я получаю экземпляр класса, я хочу сделать следующий вызов:

executor = Executor()
executror.new_method() # добавленный метод динамически

После этого вызова я хотел бы узнать, есть ли метод, который будет инициировать вызов executror.new_method()

Возможно, что это будет казаться глупым, но я рассчитываю на то, что это возможно :)


Ответы (1 шт):

Автор решения: Alpensin

Посмотрите в сторону __getattribute__. Пример очень грубый. Просто чтобы направить

class Executor:
    def __init__(self, args): self.args = args 

    def checker(self): 
        return bool(self.args)

    def new_method(self):
        print(self.args)

    def __getattribute__(self, name: str):
        if name != 'checker' and name != 'args' and not self.checker():
            print("No args")
            return
        attr = object.__getattribute__(self, name)
        if attr is None:
            print("not found attr", name)
        return attr


ex = Executor([1,2,3,4])
ex.new_method() #  [1, 2, 3, 4]
→ Ссылка