Python 为用户定义的类实现_delattr_
你的MCVE不是一个实例属性。。。而是一个类属性。因此,Python 为用户定义的类实现_delattr_,python,python-3.x,class,Python,Python 3.x,Class,你的MCVE不是一个实例属性。。。而是一个类属性。因此,\u delattr\u将无法在A的\u dict\u注册表中找到此属性,在调用del时会导致属性错误 在这种情况下,您需要使用del MyClasse.age删除属性,这也使得MyClasse的所有实例都无法访问该属性 如果您有兴趣了解如何为实例属性实现这一点,那么下面介绍如何实现。使用python3,对象自动成为任何类的超类。因此,您应该能够使用super调用它的\uuu delattr\uuu方法 Class MyClasse:
\u delattr\u
将无法在A
的\u dict\u
注册表中找到此属性,在调用del
时会导致属性错误
在这种情况下,您需要使用del MyClasse.age
删除属性,这也使得MyClasse
的所有实例都无法访问该属性
如果您有兴趣了解如何为实例属性实现这一点,那么下面介绍如何实现。使用python3,对象
自动成为任何类的超类。因此,您应该能够使用super
调用它的\uuu delattr\uuu
方法
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
现在,对刚刚创建的属性调用del
class foo():
def __delattr__(self, name):
print(name)
super().__delattr__(name)
f = foo()
f.xyz = 123
现在,尝试访问我们刚刚删除的属性:
del f.xyz # works, printing the attribute name as well
xyz
您正在使用Python2吗?如果您使用的是python3,正确的方法是调用super
s\uu delattr\uuuu
:super()?函数定义后缺少冒号(除其他问题外…)我使用的是Python 3您的MCVE不是实例属性。。。而是一个类属性。
f.xyz
AttributeError: 'foo' object has no attribute 'xyz'