1

可能重复:
Python 中的实例变量与类变量

这两种情况有什么区别,在 Python 中如何处理?

防爆1

class MyClass:
     anArray = {}

Ex2

class MyClass:
     __init__(self):
          self.anArray = {}

似乎在第一个示例中,数组被视为静态变量。Python如何处理这个问题,这是什么原因?

4

2 回答 2

5

在第一个示例中,anArray(在 Python 中称为字典,而不是数组)是类属性。可以使用MyClass.anArray. 一旦定义了类,它就存在。

在第二个示例中,anArray是一个实例属性。可以使用MyClass().anArray. (但请注意,这样做只会丢弃MyClass创建的实例;更明智的示例是mc = MyClass(); mc.anArray['a'] = 5。)在创建类的实例之前它不存在。

于 2012-05-01T04:06:46.007 回答
0

它被宣布为不同的区域。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)
于 2012-05-01T04:08:11.290 回答