Class MyClasse:
nom="me"
age=24
def __delattr__(self,name)
if name=="nom":
raise AttributeError( "you are not allowed")
else:object.__delattr__(self,name)
A=MyClasse()
del A.age
答案 0 :(得分:1)
你的MCVE所拥有的不是实例属性......而是一个类属性。因此,__delattr__
无法在A
的{{1}}注册表中找到此属性,当您致电__dict__
时会导致AttributeError
它
在这种情况下,您需要使用del
删除该属性,这也会使del MyClasse.age
的所有实例无法访问该属性。
如果您有兴趣了解如何使其适用于实例属性,那么请查看方法。使用python3,MyClasse
自动成为任何类的超类。因此,您应该可以使用object
调用其__delattr__
方法。
super
现在,在刚刚创建的属性上调用class foo():
def __delattr__(self, name):
print(name)
super().__delattr__(name)
f = foo()
f.xyz = 123
。
del
现在,尝试访问我们刚刚删除的属性:
del f.xyz # works, printing the attribute name as well
xyz