对于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)
答案 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