为什么新创建的Python对象具有以前的值

时间:2014-01-24 16:01:50

标签: python constructor

为什么这段代码:

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对象。为什么它具有前一个的价值?

2 个答案:

答案 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