python关联映射成员变量在对象之间共享的原因
对于类A,为什么aMap成员变量在对象和对象b之间共享python关联映射成员变量在对象之间共享的原因,python,Python,对于类A,为什么aMap成员变量在对象和对象b之间共享 >>> class A: ... aMap = {} >>> a = A() >>> a.aMap["hello"] = 1 >>> b = A() >>> b.aMap["world"] = 2 >>> c = [] >>> c.append(a) >>> c.append(b)
>>> 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)
因为您将其定义为类属性,而不是实例属性 如果希望将其作为实例属性,而不是在实例之间共享,则必须按如下方式定义:
class A(object):
def __init__(self):
self.aMap = {}
因为您将其定义为类属性,而不是实例属性 如果希望将其作为实例属性,而不是在实例之间共享,则必须按如下方式定义:
class A(object):
def __init__(self):
self.aMap = {}
因为它是类属性,而不是实例属性(“成员变量”) 要使其成为实例属性,请在实例上分配它,例如在构造函数中:
class A:
def __init__(self):
self.aMap = {}
但你也可以这样做:
a = A()
a.aMap = {}
因为它是类属性,而不是实例属性(“成员变量”) 要使其成为实例属性,请在实例上分配它,例如在构造函数中:
class A:
def __init__(self):
self.aMap = {}
但你也可以这样做:
a = A()
a.aMap = {}
因为您正在有效地定义一个而不是一个 要定义实例变量,应在引用对象本身的方法上执行(通常为
self
):
因为您正在有效地定义一个而不是一个 要定义实例变量,应在引用对象本身的方法上执行(通常为
self
):
我相信可以解释这一点。我相信的可能重复可以解释这一点。+1的可能重复:类属性在对象之间共享。注意“成员变量”之类的模糊短语。试着谈论“实例属性”和“类属性”,而不是“成员变量”,这是模糊的。这是正确的,特别是因为它是使用属性的唯一方法,当您将来需要它们时:-)+1:类属性在对象之间共享。注意“成员变量”之类的模糊短语。试着谈论“实例属性”和“类属性”,而不是“成员变量”,这是模糊的。这是正确的,特别是当您将来需要属性时,这是使用属性的唯一方法:-)