2010-07-30 10 views
10

사용자 정의 유형의 인스턴스에 대해 새 속성 ("새"는 "이전에 클래스 본문에 정의되지 않았 음"을 의미)을 만들 수 있지만 왜 동일한 속성을 사용할 수 없는지 알고 싶습니다. object 자체와 같은 내장형입니다.사용자 정의 유형이 파이썬에서 임시 속성을 허용하는 이유는 무엇입니까 (내장 기능은 포함하지 않습니까)?

코드 예제 :

>>> class SomeClass(object): 
...  pass 
... 
>>> sc = SomeClass() 
>>> sc.name = "AAA" 
>>> sc.name 
'AAA' 
>>> obj = object() 
>>> obj.name = "BBB" 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'object' object has no attribute 'name' 

답변

6

일부 개체 (속성을 '새로 정의 된'모든 사용자 정의를 저장하는 사전 임) __dict__ 속성이 없습니다. __slots__ 변수를 사용하여 동일한 동작을 에뮬레이션 할 수 있습니다 (python reference 참조). __dict__를 사용하여 클래스를 서브 클래 싱하는 경우 __slots__ 변수는 아무 효과가 없습니다. 그리고 항상 새 스타일 클래스에 대해 객체을 서브 클래 싱하는 중이므로 객체에 __dict__이 없어야합니다. 그러면 __slots__을 사용할 수 없게됩니다. __slots__가없는 클래스는 메모리가 적고 아마도 약간 빠릅니다.