Вы можете добавить атрибуты к любому объекту, который имеет __dict__
.
x = object()
не имеет его.
- Строки и другие простые встроенные объекты также не имеют его.
- Классы, использующие
__slots__
, также не имеют его.
- Классы, определенные с
class
, имеют его, если не применяется предыдущий оператор.
Если объект использует __slots__
/ не имеет __dict__
, обычно это экономит место. Например, в str
было бы излишне иметь диктат - представьте, как много раздувается для очень короткой строки.
Если вы хотите проверить, имеет ли данный объект __dict__
, вы можете использовать hasattr(obj, '__dict__')
.
Это также может быть интересно прочитать:
Некоторые объекты, такие как встроенные типы и их экземпляры (списки, кортежи и т. Д.), Не имеют __dict__
. Следовательно, пользовательские атрибуты не могут быть установлены на них.
Еще одна интересная статья о модели данных Python, включая __dict__
, __slots__
и т. Д., это из ссылки на Python.