-1
假设我有一个类:Python的覆盖元类集属性
class ABC:
pass
而且我做的:
ABC.x = 123
这不会给我一个错误,尽管我还没有创建一个对象。调用哪个__func__
方法,以及如何覆盖它?
假设我有一个类:Python的覆盖元类集属性
class ABC:
pass
而且我做的:
ABC.x = 123
这不会给我一个错误,尽管我还没有创建一个对象。调用哪个__func__
方法,以及如何覆盖它?
您需要定义一个元类并在其中覆盖__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
你设置类对象的属性。所以'__setattr__'被调用,但它在元类上被调用。查找元类以了解您所处的位置。 – BrenBarn
@BrenBarn感谢您的建议,我会尽快做到这一点。然而,为了解决我眼前的问题,你介意提交一个答案吗? :) –
你使用Python 2还是Python 3? – BrenBarn