Adding attributes to python objects

前端 未结 1 557
無奈伤痛
無奈伤痛 2020-12-08 00:33

It\'s a thing that bugged me for a while. Why can\'t I do:

>>> a = \"\"
>>> a.foo = 2
Traceback (most recent call last):
  File \"

        
相关标签:
1条回答
  • 2020-12-08 01:14

    You can add attributes to any object that has a __dict__.

    • x = object() doesn't have it, for example.
    • Strings and other simple builtin objects also don't have it.
    • Classes using __slots__ also do not have it.
    • Classes defined with class have it unless the previous statement applies.

    If an object is using __slots__ / doesn't have a __dict__, it's usually to save space. For example, in a str it would be overkill to have a dict - imagine the amount of bloat for a very short string.

    If you want to test if a given object has a __dict__, you can use hasattr(obj, '__dict__').

    This might also be interesting to read:

    Some objects, such as built-in types and their instances (lists, tuples, etc.) do not have a __dict__. Consequently user-defined attributes cannot be set on them.

    Another interesting article about Python's data model including __dict__, __slots__, etc. is this from the python reference.

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