Why can't I directly add attributes to any python object?

前端 未结 3 1702
情歌与酒
情歌与酒 2020-12-09 16:56

I have this code:

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


        
相关标签:
3条回答
  • 2020-12-09 16:59

    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
    ...
    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
    
    0 讨论(0)
  • 2020-12-09 17:15

    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

    0 讨论(0)
  • 2020-12-09 17:18

    It's written in C

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

    It doesn't seem to implement setattr.

    0 讨论(0)
提交回复
热议问题