Напечатать что-нибудь, когда доступ к атрибуту
Я пытаюсь распечатать что-то, когда я получаю доступ к атрибуту класса с помощью __getattribute__
Большая проблема здесь - рекурсия и тот факт, что я переопределяю метод getattribute.
Боюсь, мне придется использовать метакласс для решения этой проблемы. Во всяком случае, если у вас есть ответ на эту проблему.
1 ответ
__getattribute__
используется для доступа ко всем атрибутам в вашем экземпляре. Это включает self.recursion
в этом методе.
Вам редко нужно использовать __getattribute__
, Если у вас действительно есть подходящий вариант использования, избегайте доступа к атрибутам или использования super(A, self).__getattribute__()
чтобы избежать бесконечных проблем рекурсии.
Для вашего варианта использования (печать чего-либо при обращении к атрибуту) используйте super()
еще вернуть оригинальный атрибут:
class A(object):
def meth(self):
return "met"
def __getattribute__(self, name):
print "IN CLASS A"
return super(A, self).__getattribute__(name)
Обратите внимание, что для super()
для работы нужно использовать класс нового стиля, наследуя от object
, Если вы наследуете от чего-то другого, и это что-то еще имеет __getattribute__
метод, это уже класс нового стиля.