В python незаконно создавать новый атрибут для экземпляра объекта, такого как
>>> a = object()
>>> a.hhh = 1
throws
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'hhh'
Однако для объекта функции это нормально.
>>> def f():
... return 1
...
>>> f.hhh = 1
В чем обоснование этой разницы?