2012-05-01 146 views
1

可能重复:
Instance variables vs. class variables in PythonPython ...静态变量?

的是这两种情况之间的差异,它是如何使用Python处理?

练习1

class MyClass: 
    anArray = {} 

练习2

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

这似乎是在第一实施例的阵列被视为一个静态变量。 Python如何处理这个问题,这是什么原因?

+0

这不是一个“静态变量”,但它是*具体对象*的成员,它有一个“稳定的名称”。这可能是哪个对象? ;-)(请记住,类不是Python中的“只是定义”)。 – 2012-05-01 04:06:53

+0

它们被称为类变量。 http://stackoverflow.com/questions/2714573/instance-variables-vs-class-variables-in-python或http://stackoverflow.com/questions/68645/static-class-variables-in-python – birryree

回答

5

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

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

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) 
+1

我认为类属性和实例属性是更合适的术语。 – jdi

+0

林不知道你试图用这些代码显示什么,因为它们完全相同。 – Joost