Есть ли возможность отловить вызов метода в 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 шт):
Посмотрите в сторону __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]