假设我有一个班级:
class ABC:
pass
我做了:
ABC.x = 123
即使我没有创建对象,这也不会给我一个错误。调用了哪个__func__
方法,以及如何覆盖它?
答案 0 :(得分:2)
您需要定义一个元类并在那里覆盖__setattr__
,然后让您的类使用该元类。
class Meta(type):
def __new__(meta, name, bases, attrs):
return super().__new__(meta, name, bases, attrs)
def __setattr__(cls, attr, value):
print("I am setting {}.{} = {}".format(cls.__name__, attr, value))
return super().__setattr__(attr, value)
class Foo(metaclass=Meta):
pass
然后:
>>> Foo.blah = 2
I am setting Foo.blah = 2
>>> Foo.blah
2