Why Can't I Directly Add Attributes To Any Python Object?
I have this code: >>> class G: ... def __init__(self): ... self.x = 20 ... >>> gg = G() >>> gg.x 20 >>> gg.y = 2000 And this code: >&g
Solution 1:
My guess, is that the implementation of datetime uses __slots__ for better performance.
When using __slots__
, the interpreter reserves storage for just the attributes listed, nothing else. This gives better performance and uses less storage, but it also means you can't add new attributes at will.
Read more here: http://docs.python.org/reference/datamodel.html
Solution 2:
It's written in C
http://svn.python.org/view/python/trunk/Modules/datetimemodule.c?view=markup
It doesn't seem to implement setattr.
Solution 3:
While the question has already been answered; if anyone is interested in a workaround, here's an example --
mydate = datetime.date(2013, 3, 26)
mydate.special = 'Some special date annotation'# doesn't work
...
classCustomDate(datetime.date):
pass
mydate = datetime.date(2013, 3, 26)
mydate = CustomDate(mydate.year, mydate.month, mydate.day)
mydate.special = 'Some special date annotation'# works
Post a Comment for "Why Can't I Directly Add Attributes To Any Python Object?"