Расширяя свой кругозор с помощью javascript и опыта работы с Python, я задумался.
Какова цель типа, если видение сущности для внешнего клиента через его интерфейс?
В статических типизированных языках тип имеет очень сильное, центральное значение. Тип и интерфейс строго связаны. Например, в java, когда вы объявляете интерфейс FooIface и объект реализует этот интерфейс, вы не можете использовать его в контексте, требующем BarIface, даже если оба они в точности совпадают с точки зрения методов, подписей и исключений.
Не так в питоне. Даже если два объекта имеют совершенно разные и несвязанные типы, при условии, что их интерфейс одинаков, они полностью и прозрачно взаимозаменяемы. Если он крякает и ходит как утка, это утка. Я могу полностью изменить природу объекта, полностью изменив его интерфейс во время выполнения, но он сохранит исходный тип.
Эта точка зрения доведена до крайности в javascript, где каждый объект в любой цепочке прототипов - это просто объект. Вы спрашиваете тип каждого объекта в javascript, и он скажет вам только, что это объект.
Мне кажется, что понятие типа для этих языков находится на пределе тщетности. Для чего тогда действительно жизненно важно? Имеет ли тип реальное значение в динамически типизированных языках?