How object's setattr differs from inherited?

Ciantic jari.pennanen at gmail.com
Fri Jul 29 17:12:05 CEST 2011


>>> class MyObject(object):
...     pass
...
>>> my = MyObject()
>>> my.myvar = 'value' # No error!
>>>
>>> obj = object()
>>> obj.myvar = 'value'  # Causes error!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'myvar'

Why simple inheritance from object does not cause errors at setattr,
yet direct init of object() does?


I was trying to "decor" objects, lists etc with own attributes that
could be used in templates and was sadly not permitted to do so:

>>> something = [1,2]
>>> something.myvar = 'value'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'myvar'

(I could "solve" this by inheriting from list, but there are cases
where I can't do so, the data is coming elsewhere and wrapping it is
ugly, adding new attribute would be neater)

But my question now is why this setattr problem happens on some types?
What are the types that usually does not allow to arbitrary setattr?



More information about the Python-list mailing list