파이썬 객체에 속성을 직접 추가 할 수없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/623520

  •  05-07-2019
  •  | 
  •  

문제

이 코드가 있습니다.

>>> class G:
...   def __init__(self):
...     self.x = 20
...
>>> gg = G()
>>> gg.x
20
>>> gg.y = 2000

그리고이 코드 :

>>> from datetime import datetime
>>> my_obj = datetime.now()
>>> my_obj.interesting = 1
*** AttributeError: 'datetime.datetime' object has no attribute 'interesting'

내 파이썬 지식에서 나는 그렇게 말할 것입니다 datetime 재정의 setattr/getattr, 그러나 확실하지 않습니다. 여기서 약간의 빛을 흘릴 수 있습니까?

편집 : 나는 구체적으로 관심이 없습니다 datetime. 나는 일반적으로 물체에 대해 궁금했다.

도움이 되었습니까?

해결책

내 생각에, DateTime의 구현은 __slots__ 더 나은 성능을 위해.

사용할 때 __slots__, 통역사는 나열된 속성에 대한 스토리지를 보유합니다. 이는 성능이 향상되고 저장소가 적을수록 더 적은 스토리지를 사용하지만 마음대로 새로운 속성을 추가 할 수 없습니다.

자세히보기 : http://docs.python.org/reference/datamodel.html

다른 팁

c

http://svn.python.org/view/python/trunk/modules/datetimemodule.c?view=markup

setattr을 구현하지 않는 것 같습니다.

질문이 이미 답변되었지만; 누구든지 해결 방법에 관심이 있으시면 다음은 다음과 같습니다.

mydate = datetime.date(2013, 3, 26)
mydate.special = 'Some special date annotation'  # doesn't work
...
class CustomDate(datetime.date):
    pass
mydate = datetime.date(2013, 3, 26)
mydate = CustomDate(mydate.year, mydate.month, mydate.day)
mydate.special = 'Some special date annotation'  # works
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top