Можно ли создать класс декоратора для отслеживания чего-либо во внешнем классе и в то же время разрешать нормально вызывать декорированные методы?Когда вы реализуете call для вашего класса декоратора, self
, который он передает, является экземпляром декоратора, а не экземпляром, в котором метод фактически вызывается.Есть ли способ обойти это?
class Outer:
class Inner:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
pass
# Something like return Inner-self.func(Outer-self, *args, **kwargs)
def __init__(self, number):
self.number = number
@Inner
def print_number(self):
print(self.number)
instance = Outer(2)
instance.print_number()
# Should print 2