2012-05-01 3 views
1

가능한 중복 :
Instance variables vs. class variables in Python
파이썬 ... 정적 변수?

무엇이 두 상황 사이의 차이가 어떻게 파이썬으로 처리? 는 제 1 실시 예에 관한 어레이는 정적 변수처럼 취급되고처럼

EX1

class MyClass: 
    anArray = {} 

EX2

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

이 보인다. 파이썬은 이것을 어떻게 처리하나요? 그리고 그 이유는 무엇입니까?

+0

"정적 변수"가 아니지만 "안정된 이름"을 가진 * 특정 개체 *의 구성원입니다. 어떤 대상이 될 수 있을까요? ;-) (클래스는 파이썬에서 "정의"가 아닙니다.) –

+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 (파이썬에서는 사전이라고하며 배열이 아닙니다)은 클래스 속성입니다. 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