Какая концепция типизации используется в Python?

Ответ

В 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+): Позволяют добавлять подсказки о типах для улучшения читаемости кода и статического анализа, но не влияют на поведение программы во время выполнения.