我正在阅读Python教程并遇到以下代码:
x.counter = 1
while x.counter < 10:
x.counter = x.counter * 2
print x.counter
del x.counter
显然del
可以从类实例中删除属性。我做了一些实验,发现只能删除不在类定义中的新添加的属性。
class obj:
a = 1
x = obj()
print x.a #this outputs 1
del x.a
并引发以下异常。
AttributeError: obj instance has no attribute 'a'
任何人都可以向我解释为什么?
答案 0 :(得分:2)
您未创建实例变量。因此a
不属于x
的命名空间,而属于obj
的命名空间。您可以删除它,但必须引用obj
:
del obj.a
要创建实例变量,您必须定义构造函数:
class obj:
def __init__(self):
self.a = 1
x = obj()
del x.a