ご存知のように、Python などの動的言語を使用している場合、型について心配する必要はありません。動的型付けにより、その心配をせずに作業できるからです。それでも、関数を使用して変数の型を知ることができますtype()
(Python で)。私の質問は次のとおりです。動的言語で型チェックを行うと、どのようなメリットがありますか?
3 に答える
型チェックを行いたい場合がいくつかあります。たとえば、イテレータを操作したいが、文字列は操作したくないとします。これはかなり一般的なケースです。そのチェックを行う最良の方法は、項目が文字列かどうかを確認することです。
if isinstance(someobj, str): # basestring in 2.x
...
isinstance()
クラス自体のインスタンスだけでなく、サブクラスも使用できるように使用します。を使用して直接チェックすることtype()
は、ほとんど一般的にひどい考えですが、type()
他の用途もあります。型チェック以外の理由でインスタンスのクラスにアクセスしたい場合があります。
また、Python ではサブクラス フックを使用して抽象基本クラスを定義できることも注目に値します。これによりisinstance()
、一種のダック型チェックが可能になり、必要な関連メソッドについてクラスがチェックされます。たとえば、何かがシーケンスであることを確認したい場合、実際には従来の意味での型チェックでisinstance(obj, collections.Sequence)
はないため、実行することは悪くありません。オブジェクトにシーケンス インターフェイスに必要な関数があるかどうかを確認します ( docs で定義されています) 。 .
ただし、一般に、型チェックは避ける必要があります。ほとんどの場合、単純にやりたいことを試して、オブジェクトが必要なことを実行できない場合は例外をキャッチすることができます。Python は一般に、許可ではなく許しを求めるというルールに従っています。そのため、事前に確認するのではなく、試してみてエラーを適切に処理してください。
要するに、動的言語では、ダックタイピングに依存しています。オブジェクトが鳴くことができる場合、それはアヒルであると想定できます。99% の確率で、鳴き声を出せるオブジェクトはアヒルとして扱うことができるので、問題ありません。ただし、まれに、鳴くことができる別の動物をアヒルとして扱うべきではありません。それらを区別できる唯一の方法は、型チェックを行うことであり、それで問題ありません。ただし、動物が鳴くことができるかどうかを確認するために型チェックを使用するべきではありません。いんちきできることがわかっているタイプをチェックするのではなく、いんちきをする能力)。