Решил набросать небольшой пост по ООП... Вот пример композиции и агрегирования с точки зрения кода, написанного на Swift (на Python можно сделать по аналогии). Посмотрев на этот код, вы сможете оценить разницу между ними.
У меня давно назревала подобная статья, еще примерно с момента осознания того, почему синглтон это плохо (может когда-нибудь будет статья и на эту тему).
Если вы занимаетесь deep learning, возможно стоит задуматься о том, чтобы изучить Swift.
Каждый разработчик, копнув чуть дальше в области функционального реактивного программирования, рано или поздно сталкивается с такими понятиями, как функтор или монада. Поначалу они могут показаться довольно страшными, но на самом деле ничего страшного или сложного в них нет.