А вы знали, что в Python объектам можно присваивать новые атрибуты даже в том случае, если они не были заранее определены в классе?
Это возможно благодаря динамической природе языка и внутреннему устройству объектов.
Рассмотрим пример:
class Point:
pass
p = Point()
p.x = 1
p.y = 2
print(p.x, p.y) # → 1 2
Класс
Point не содержит определения атрибутов x и y, однако они корректно работают. Почему?Каждый пользовательский объект по умолчанию имеет специальный словарь
__dict__, в который записываются все атрибуты экземпляра.print(p.__dict__)
# {'x': 1, 'y': 2}
Команда
p.x = 1 фактически означает добавление ключа 'x' со значением 1 в p.__dict__.Подытожим: Python позволяет свободно добавлять атрибуты к объектам. Это удобно, но в реальных проектах лучше задавать их явно через
__init__ — так надёжнее и понятнее.❤ — если было полезно
😎 — если уже знал об этом
tags: #обучение
➡ Python Developer | Чат
