这是因为Python使用解析名称的方式.
。在编写时self.list
,Python运行时首先尝试list
通过在实例对象中查找名称来解析名称,如果找不到,则在类实例中进行查找。
让我们逐步研究它
self.list.append(1)
但是当您绑定名称时,情况有所不同:
self.list = []
因此,这始终是一个实例变量。
您的第一个示例list
在类实例中创建了一个,因为这是当时的活动范围(没有self
任何地方)。但是您的第二个示例list
在的范围内显式创建了一个self
。
这个例子更有趣:
class testClass():
list = ['foo']
def __init__(self):
self.list = []
self.list.append('thing')
x = testClass()
print x.list
print testClass.list
del x.list
print x.list
那将打印:
['thing']
['foo']
['foo']