У меня есть следующий код python:
class FooMeta(type):
def __setattr__(self, name, value):
print name, value
return super(FooMeta, self).__setattr__(name, value)
class Foo(object):
__metaclass__ = FooMeta
FOO = 123
def a(self):
pass
Я ожидал, что __setattr__
метакласса будет вызван как для FOO
, так и для a
. Однако он вообще не называется. Когда я присваиваю что-то Foo.whatever
после того, как класс был определен, вызывается метод.
В чем причина такого поведения и есть способ перехватить назначения, которые происходят во время создания класса? Использование attrs
в __new__
не будет работать, так как я хотел бы проверить, переопределяется ли метод.