Python只删除" new"一个类的属性?

时间:2014-08-09 10:27:35

标签: python

我正在阅读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'

任何人都可以向我解释为什么?

1 个答案:

答案 0 :(得分:2)

您未创建实例变量。因此a不属于x的命名空间,而属于obj的命名空间。您可以删除它,但必须引用obj

的命名空间
del obj.a

要创建实例变量,您必须定义构造函数:

class obj:
    def __init__(self):
        self.a = 1
x = obj()
del x.a