对方法签名的不兼容更改。这在 Python 中不会像在 Java 和 C++ 中那样发生。
Python 在定义方法签名方面具有可选参数、默认值和更大的灵活性。此外,鸭子类型意味着——例如——作为重大软件更改的一部分,您不必从某个类切换到接口。事情没有那么复杂。
您如何找到调用该方法的所有位置? grep 适用于动态语言。如果您需要知道使用方法的每个地方,grep(或等效的 IDE 支持的搜索)非常有用。
由于您没有要查找的静态类型,您如何找出实例提供的操作?
一种。看源头。您无需处理对象库和 jar 文件的 Java/C++ 问题。您不需要这些语言所需的所有复杂的辅助工具和工具。
湾。IDE 可以在许多常见情况下提供签名信息。您可以轻松击败 IDE 的推理能力。发生这种情况时,您可能应该检查您正在做的事情以确保它有意义。如果您的 IDE 无法推断出您的类型信息,那么它可能过于动态。
C。在 Python 中,您经常通过交互式解释器工作。与 Java 和 C++ 不同,您可以直接交互式地探索您的实例。您不需要复杂的 IDE。
例子:
>>> x= SomeClass()
>>> dir(x)
你如何处理/防止打字错误? 与静态语言相同:您不会阻止它们。你找到并纠正它们。Java 只能找到某一类拼写错误。如果你有两个相似的类或变量名,你可能会遇到很大的麻烦,即使是静态类型检查。
例子:
class MyClass { }
class MyClassx extends MyClass { }
这两个类名的拼写错误可能会造成严重破坏。[“但我不会把自己放在 Java 的那个位置上,”人们说。同意。我也不会把自己放在 Python 的那个位置上。你制作的课程完全不同,如果被滥用,它们会很早就失败。]
UnitTest 是否用作静态类型检查的替代品? 这是另一种观点:静态类型检查替代了清晰、简单的设计。
我曾与不确定应用程序为什么工作的程序员一起工作。他们无法弄清楚为什么事情没有编译;不知道抽象超类和接口之间的区别,也不知道为什么一个地方的改变会导致一个单独的 JAR 文件中的一堆其他模块崩溃。静态类型检查使他们对有缺陷的设计产生了错误的信心。
动态语言使程序变得简单。简单性是静态类型检查的替代品。Clarity 是静态类型检查的替代品。