可能重复:
Python 中的实例变量与类变量
这两种情况有什么区别,在 Python 中如何处理?
防爆1
class MyClass:
anArray = {}
Ex2
class MyClass:
__init__(self):
self.anArray = {}
似乎在第一个示例中,数组被视为静态变量。Python如何处理这个问题,这是什么原因?
可能重复:
Python 中的实例变量与类变量
这两种情况有什么区别,在 Python 中如何处理?
防爆1
class MyClass:
anArray = {}
Ex2
class MyClass:
__init__(self):
self.anArray = {}
似乎在第一个示例中,数组被视为静态变量。Python如何处理这个问题,这是什么原因?
在第一个示例中,anArray
(在 Python 中称为字典,而不是数组)是类属性。可以使用MyClass.anArray
. 一旦定义了类,它就存在。
在第二个示例中,anArray
是一个实例属性。可以使用MyClass().anArray
. (但请注意,这样做只会丢弃MyClass
创建的实例;更明智的示例是mc = MyClass(); mc.anArray['a'] = 5
。)在创建类的实例之前它不存在。
它被宣布为不同的区域。Ex1 类似于全局或静态变量。
obj = MyClass()
obj2 = MyClass()
print "IS one instance ", id(obj.anArray) == id(obj2.anArray)
Ex2 是本地属性。
obj = MyClass()
obj2 = MyClass()
print "IS one instance ", id(obj.anArray) == id(obj2.anArray)