我不明白下面这个例子的区别。一次一个类的实例可以更改另一个实例的类变量,而另一次不能?你知道吗
例1:
class MyClass(object):
mylist = []
def add(self):
self.mylist.append(1)
x = MyClass()
y = MyClass()
x.add()
print "x's mylist: ",x.mylist
print "y's mylist: ",y.mylist
输出:
x's mylist: [1]
y's mylist: [1]
因此这里类A
的实例x
能够访问和修改类属性mylist
,它也是A
的实例y
的属性。你知道吗
例2:
class MyBank(object):
crisis = False
def bankrupt(self) :
self.crisis = True
bankX = MyBank()
bankY = MyBank()
bankX.bankrupt()
print "bankX's crisis: ",bankX.crisis
print "bankY's crisis: ",bankY.crisis
^{2}$
为什么在本例中不起作用?你知道吗
在第一种情况下,add方法中没有赋值:
在第二种情况下,有一项任务:
当在实例上设置属性时,它总是只在特定实例上设置(它放在实例的
__dict__
属性中)。类__dict__
不受影响。你知道吗在第一种情况下,并没有赋值,所以标准的查找规则适用。因为实例的
__dict__
属性中没有“mylist”,所以它会返回到类__dict__
。你知道吗在
add
中执行的操作会使存储在MyClass.__dict__
中的值发生变化。这就是为什么变化在所有情况下都是可以观察到的。你知道吗考虑以下片段(它可以更好地解释您的问题):
相关问题 更多 >
编程相关推荐