Incompatible changes in the method signature. This is not as much in Python as it is in Java and C ++.
Python has optional arguments, default values, and much more flexibility in defining method signatures. In addition, duck printing means that, for example, you do not need to switch from any class to an interface as part of a major software change. It's just not that complicated.
How do you find all the places where this method is called? grep works for dynamic languages. If you need to know every place where the method is used, grep (or an equivalent search with IDE support) works fine.
How do you know what operations an instance provides since you do not have a static type to search for?
but. Look at the source. You have no problem with Java / C ++ for object libraries and jar files. You do not need all the necessary tools and tools necessary for these languages.
b. The IDE can provide signature information in many common circumstances. You can easily defeat your arguments for the IDE. When this happens, you should probably consider what you are doing to make sure that it makes sense. If your IDE cannot determine your type information, it may be too dynamic.
from. In Python, you often work through an interactive interpreter. Unlike Java and C ++, you can explore your instances directly and interactively. You do not need a complex development environment.
Example:
>>> x= SomeClass() >>> dir(x)
How do you handle / prevent input errors? Same as static languages: you do not prevent them. You find and correct them. Java can only find a specific class of typos. If you have two similar class or variable names, you may run into serious problems even when checking for a static type.
Example:
class MyClass { } class MyClassx extends MyClass { }
A typo with these two class names can lead to chaos. “But I wouldn’t take this position using Java,” people say. Agreed. I also did not put myself in this position with Python; you make classes that are very different from each other and will work early if they are used incorrectly.]
Is UnitTest used as a replacement for checking static type? Here's another point of view: static type checking is a replacement for a simple and straightforward design.
I worked with programmers who were not sure why the application was working. They could not understand why things were not going; he did not know the difference between an abstract superclass and an interface, and could not understand why a change in location makes a bunch of other modules in a separate JAR file failure. The static type test gave them false confidence in the wrong design.
Dynamic languages allow programs to be simple. Simplicity is a replacement for static type checking. Clarity replaces static type checking.