2011-05-06 6 views
35

잠시 동안 나를 괴롭혔던 것이 있습니다. 내가 할 수없는 이유 :파이썬 객체에 속성 추가하기

>>> a = "" 
>>> a.foo = 2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'foo' 

... 나는 다음을 할 수 있습니까?

여기에 어떤 규칙이 적용됩니까? 좀 설명해 주시겠습니까?

+1

btw,'class Bar() :'대신'class Bar (object) :'를 사용해야 새로운 스타일의 클래스를 얻을 수 있습니다. – ThiefMaster

답변

53

__dict__이있는 모든 개체에 특성을 추가 할 수 있습니다.

  • x = object()에는 없습니다.
  • 문자열 및 다른 간단한 기본 제공 개체에도 포함되어 있지 않습니다.
  • __slots__을 사용하는 클래스에도이 클래스가 없습니다.
  • class으로 정의 된 클래스에는 이전 설명이 적용되지 않는 한 해당 클래스가 있습니다.

개체에/__dict__이없는 경우 대개 공간을 절약 할 수 있습니다. 예를 들어, str에서는 매우 짧은 문자열에 대한 부풀음의 양을 상상해보십시오.

주어진 개체에 __dict__이 있는지 테스트하려면 hasattr(obj, '__dict__')을 사용할 수 있습니다.

This

또한 읽기 흥미로운 일이 될 수 있습니다와 같은 내장 타입과 인스턴스 (리스트, 튜플, 등) __dict__이없는 등

일부 개체. 따라서 사용자 정의 속성을 설정할 수 없습니다.

__dict__ 포함 파이썬의 데이터 모델, __slots__에 대한 또 다른 흥미로운 기사는 파이썬 기준에서 this입니다.

관련 문제