メソッドのシグネチャに対する互換性のない変更。これは、Java や C++ ほど Python では発生しません。
Python には、オプションの引数、デフォルト値があり、メソッド シグネチャを定義する際の柔軟性がはるかに高くなっています。また、ダック タイピングは、たとえば、ソフトウェアの大幅な変更の一環として、クラスからインターフェイスに切り替える必要がないことを意味します。物事はそれほど複雑ではありません。
そのメソッドが呼び出されているすべての場所をどのように見つけますか? grep は動的言語で機能します。メソッドが使用されているすべての場所を知る必要がある場合は、grep (または同等の IDE がサポートする検索) が最適です。
ルックアップする静的な型がないため、インスタンスが提供する操作をどのように見つけますか?
を。ソースを見てください。オブジェクト ライブラリと jar ファイルの Java/C++ の問題に対処する必要はありません。これらの言語に必要なすべての精巧な補助機能やツールは必要ありません。
b. IDE は、多くの一般的な状況で署名情報を提供できます。IDE の推論能力を簡単に破ることができます。そのような場合は、自分が行っていることを見直して、それが理にかなっていることを確認する必要があります。IDE が型情報を推論できない場合は、動的すぎる可能性があります。
c. Python では、対話型インタープリターを介して作業することがよくあります。Java や C++ とは異なり、インスタンスを直接かつインタラクティブに探索できます。洗練された IDE は必要ありません。
例:
>>> x= SomeClass()
>>> dir(x)
入力ミスをどのように処理/防止していますか? 静的言語と同じです。それらを妨げません。それらを見つけて修正します。Java は、特定のクラスのタイプミスしか検出できません。2 つの類似したクラス名または変数名がある場合、静的な型チェックを使用しても、深刻な問題に陥る可能性があります。
例:
class MyClass { }
class MyClassx extends MyClass { }
これら 2 つのクラス名のタイプミスは、大混乱を引き起こす可能性があります。[「しかし、私は Java でそのような立場にはなりません」と人々は言います。同意した。私も、Python でそのような立場に身を置くつもりはありません。まったく異なるクラスを作成し、誤用すると早期に失敗します。]
UnitTest は静的型チェックの代わりに使用されていますか? もう 1 つの視点は次のとおりです。静的型チェックは、明確でシンプルな設計に代わるものです。
私は、アプリケーションが機能する理由がわからないプログラマーと仕事をしたことがあります。彼らは、コンパイルできない理由を理解できませんでした。は抽象スーパークラスとインターフェースの違いを知らず、別の JAR ファイル内の他のモジュールの束がクラッシュする理由を理解できませんでした。静的型チェックにより、設計に欠陥があるという誤った確信が彼らに与えられました。
動的言語を使用すると、プログラムを単純にすることができます。シンプルさは、静的型チェックの代わりになります。Clarity は、静的型チェックの代わりになります。