为什么python关联映射成员变量在对象之间共享

时间:2010-02-19 21:42:54

标签: python

对于A类,为什么在对象和对象b?

之间共享一个map成员变量
>>> class A:
...     aMap = {}

>>> a = A()
>>> a.aMap["hello"] = 1

>>> b = A()
>>> b.aMap["world"] = 2

>>> c = []
>>> c.append(a)
>>> c.append(b)

>>> for i in c:
...     for j in i.aMap.items():
...         print j
('world', 2)  
('hello', 1)  
('world', 2)  
('hello', 1)  

3 个答案:

答案 0 :(得分:5)

因为您将其定义为类属性,而不是实例属性。

如果您希望将其作为实例属性并且不在实例之间共享,则必须按以下方式对其进行定义:

class A(object):
    def __init__(self):
        self.aMap = {}

答案 1 :(得分:3)

因为它是一个class属性,而不是一个实例属性(“成员变量”)。

要使其成为实例属性,请在实例上进行分配,例如在构造函数中:

class A:
    def __init__(self):
        self.aMap = {}

但你也可以这样做:

a = A()
a.aMap = {}

答案 2 :(得分:0)

因为您实际上是在定义class variable而不是instance variable

要定义实例变量,您应该在引用对象本身的方法上执行它(通常是self):

class A(object):
    class_variable = 0

    def __init__(self, a, b):
        self.instance_variable = a
        class_variable = b

>>> a=A(1,2)
>>> print a.instance_variable
1
>>> print a.class_variable
2
>>> b=A(2,1)
>>> print b.instance_variable
2
>>> print b.class_variable
1
>>> print a.instance_variable
1
>>> print a.class_variable
1