Несовместимые изменения в сигнатуре метода. В Python это происходит не так часто, как в Java и C ++.
Python имеет необязательные аргументы, значения по умолчанию и гораздо большую гибкость в определении сигнатур методов. Кроме того, типизирование утки означает, что, например, вам не нужно переключаться с какого-либо класса на интерфейс в рамках значительного изменения программного обеспечения. Все просто не так сложно.
Как найти все места, где вызывается этот метод? grep работает для динамических языков. Если вам нужно знать каждое место, где используется метод, отлично работает grep (или эквивалентный поиск с поддержкой IDE).
Как узнать, какие операции предоставляет экземпляр, поскольку у вас нет статического типа для поиска?
а. Посмотрите на источник. У вас нет проблемы Java / C ++ с объектными библиотеками и файлами JAR, с которыми нужно бороться. Вам не нужны все сложные средства и инструменты, которые нужны этим языкам.
б. IDE может предоставить информацию о подписи при многих общих обстоятельствах. Вы можете легко победить умственные способности вашей IDE. Когда это произойдет, вам, вероятно, следует проверить, что вы делаете, чтобы убедиться, что это имеет смысл. Если ваша IDE не может объяснить информацию о вашем типе, возможно, она слишком динамична.
с. В Python вы часто работаете через интерактивного переводчика. В отличие от Java и C ++, вы можете исследовать свои экземпляры напрямую и в интерактивном режиме. Вам не нужна сложная IDE.
Пример: * * один тысяча двадцать-одна
>>> x= SomeClass()
>>> dir(x)
Как вы обрабатываете / предотвращаете ошибки ввода? То же, что и в статических языках: вы их не предотвращаете. Вы найдете и исправите их. Java может найти только определенный класс опечаток. Если у вас есть два одинаковых имени класса или переменной, вы можете столкнуться с серьезными проблемами, даже со статической проверкой типов.
Пример: * * тысяча двадцать-восемь
class MyClass { }
class MyClassx extends MyClass { }
Опечатка с этими двумя именами классов может привести к хаосу. [«Но я бы не поставил себя в такое положение с Java», - говорят люди. Согласовано. Я бы тоже не поставил себя в такое положение с Python; вы делаете классы, которые сильно отличаются друг от друга, и рано потерпят неудачу, если ими злоупотребят.]
Используется ли UnitTest вместо статической проверки типов? Вот другая точка зрения: статическая проверка типов заменяет простой и понятный дизайн.
Я работал с программистами, которые не знали, почему работает приложение. Они не могли понять, почему вещи не компилируются; они не знали разницы между абстрактным суперклассом и интерфейсом и не могли понять, почему изменение на месте приводит к сбою других модулей в отдельном JAR-файле. Статическая проверка типов дала им ложную уверенность в некорректном дизайне.
Динамические языки позволяют программам быть простыми. Простота заменяет статическую проверку типов. Ясность заменяет статическую проверку типов.