我有这个代码:
>>> 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'
根据我的Python知识,我会说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.