Ответ
В Python используется утиная типизация (duck typing). Это означает, что тип объекта определяется его поведением (наличием определённых методов и атрибутов), а не явным наследованием или интерфейсом. Если объект 'крякает как утка и ходит как утка', то он считается уткой.
Такой подход обеспечивает высокую гибкость, позволяя работать с различными типами объектов через общий интерфейс, не требуя строгой иерархии классов.
Пример:
class Bird:
def fly(self):
print("Птица летит")
class Airplane:
def fly(self):
print("Самолёт взлетает")
def make_it_fly(obj):
# Не важно, Bird или Airplane — главное, что у объекта есть метод fly()
obj.fly()
make_it_fly(Bird()) # Вывод: Птица летит
make_it_fly(Airplane()) # Вывод: Самолёт взлетает
Помимо утиной типизации, Python также поддерживает:
- Динамическая типизация: Типы переменных определяются и проверяются во время выполнения программы.
- Строгая типизация: Неявные преобразования типов минимизированы, что предотвращает неожиданное поведение (например,
1 + "1"
вызовет ошибкуTypeError
). - Аннотации типов (с Python 3.5+): Позволяют добавлять подсказки о типах для улучшения читаемости кода и статического анализа, но не влияют на поведение программы во время выполнения.