__getattribute__ для функций в метакласе

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

Проблема состоит в том, что __getattribute__ вызывается не только при чтении атрибутов, но и при вызове функции, что приводит к ошибке

Каким образом можно исправить положение?

class Meta(type):
    def __init__(self,*args, **kwargs):
        self.__setattr__ = self.my_setattr
        self.__getattribute__ = self.my_getattribute

    def my_setattr(self, name, value):
        print(f'set {name}={value}')
        return super().__setattr__(name,value)

    def my_getattribute(self, item):
        print(f'get {item}')
        return super().__getattribute__(item)


class Foo(object, metaclass = Meta):
    y = 2
    def __init__(self, x):
        self.x = x
    def bar(self, v):
        return (self.x, v)

a = Foo(1)
a.x
a.y
a.bar(1)

ошибка возникающая при a.bar(1)

TypeError: bar() missing 1 required positional argument: 'v'


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