为什么这段代码:
class B:
val = []
for i in range(0, 5):
obj = B()
print(obj.val)
obj.val.append('a')
有这样的输出吗?
[]
['a']
['a', 'a']
['a', 'a', 'a']
['a', 'a', 'a', 'a']
在每次迭代中,都会创建新的B对象。为什么它具有前一个的价值?
答案 0 :(得分:6)
您正在修改类属性而非实例属性。将val
更改为实例属性:
class B(object):
def __init__(self):
self.val = []
答案 1 :(得分:0)
您已经提供了如何在python中使用static variables的示例。对问题"Static class variables in Python"的回答解释了如何实现您所做的事情。看起来每枚硬币都有两面。
Python Programming FAQ详细解释了这种行为:http://docs.python.org/2/faq/programming.html#how-do-i-create-static-class-data-and-static-class-methods