py.user.next
Во-первых, я вам не тыкал. Думаю, и не буду.
Во-вторых, я там малость отредактировал предыдущее сообщение (
Композицию взял, потому что у меня есть устойчивая связь в мозгах между ассоциацией и композицией как подклассом ассоциации. Аггрегация из той же оперы - подкласс ассоциации.
)
Джанго как (контр-)пример архитектуры, это вообще весело. Даже если не рассматривать тот факт, что местами ребята застряли в 90х, тем не менее, они развиваются, меняют модели, дропают депрекейты, и прочая, прочая, прочая.
И перекладывают, конечно, головную боль по обновлению на консьюмеров фреймворка, но ведь это уже другая история.
Что значит “загружать дерево классов”? Вы имеете в виду необходимость инициализации предков в процессе инициализации потомка? Ну да, небыстрая операция. Но однократная. И поведение объекта всегда детерминировано, хотя конечно для питона, с его возможностями, это и не обязательно.
Но вот “ничего не подгружать если оно не нужно” предполагает, что мы должны в рантайме проверять, а подгрузили ли мы, это как минимум. А еще возможны кейсы, где у нас логика выбора загружаемого может быть нетривиальна.
И, хотя это субъективно, код с ассоциациями читается хуже, чем код с наследованием.
Больше того, ассоциации всё-таки используются для описания связей между объектами, а не как замена наследования.
Вот вам на почитать, там хорошо расписано, что и когда применять
https://www.thoughtworks.com/insights/blog/composition-vs-inheritance-how-chooseАссоциации - не серебряная пуля. Им есть своё место в жизни, но они ни в коей мере не замена.