Самым важным понятием, которое нужно понять, если исходить из Java-фона, является то, что наследование классов - это инструмент, который редко требуется для решения проблем в Python.Модным словом для этой идеи является утка, печатающая .
Большая часть программы на Python обращается к атрибутам объекта или вызывает их.Как и в Java, вы можете получить полезное поведение, предоставив функции, которая ожидает объект одного типа, объект другого, более усовершенствованного типа.Чтобы это работало в java, необходимо, чтобы замещенный объект либо наследовал от ожидаемого типа, либо реализовывал ожидаемый интерфейс.
В python это вообще не нужно;Если замещенный объект имеет все атрибуты, ожидаемые от функции, которую вы передаете ему, то он просто будет работать.
Единственная причина для достижения наследования в python заключается в том, что суперкласс действительно, действительно, делает практически всеиз всего, что вам нужно для создания нового типа, и вам нужно только добавить несколько дополнительных поведений.
Наиболее распространенный пример этого - протокол итератора в python.Любой объект, имеющий метод __iter__()
, который возвращает сам объект, и метод next()
, который вообще возвращает что-либо, является итератором и может отображать оператор for
.str
, list
, dict
, file
и многие другие типы, которые не имеют ничего общего, и только глобальный object
в качестве общего суперкласса, каждый реализует протокол итератора.