問題: 戻り値が Python 辞書であることを確認する必要があります。
Q1. これらのオプションのうち、これを行う適切な方法はどれですか?
type(x) == dict
type(x) == type(dict)
isinstance(d, dict)
is次に、 の代わりに operator を使用する他のバリアントがあり==ます。
Q2. オブジェクトの型をチェックすることは一般的に悪い習慣だと多くの人が言いますが、私の最初の問題に関して、他に選択肢はありますか?
問題: 戻り値が Python 辞書であることを確認する必要があります。
Q1. これらのオプションのうち、これを行う適切な方法はどれですか?
type(x) == dict
type(x) == type(dict)
isinstance(d, dict)
is次に、 の代わりに operator を使用する他のバリアントがあり==ます。
Q2. オブジェクトの型をチェックすることは一般的に悪い習慣だと多くの人が言いますが、私の最初の問題に関して、他に選択肢はありますか?
Q1. これらのオプションのうち、これを行う適切な方法はどれですか?
型チェックで時間を無駄にしないでください。
仮定に基づいているため、エラーが発生しやすいです。
Q2. ...他に選択肢はありますか?
はい、これを行います。
try:
x.the_dict_operation()
except TypeError:
# x was not the expected type for the operation
raise # or whatever.
ほとんどの場合、これは「何もしない」ことになります。
コードを書くだけです。「どういうわけか」悪意のあるソシオパスが間違ったタイプを使用すると、想定どおりにクラッシュします。
実際のタイプではなく、動作に依存します(他の回答を参照)。
多くのオブジェクトが辞書のように機能します。関数/API のユーザーに単純な辞書の使用を強制したくありませんよね?
実用的な側面では:
>>> type({})
<type 'dict'>
>>> dict
<type 'dict'>
>>> type(dict)
<type 'type'>
>>> isinstance({}, dict)
True
>>> isinstance("", dict)
False
__getitem__タイプを確認するのではなく、確認してください。型チェックが本当に必要な場合は、どれでもかまいません (ただし、 を除いて、インスタンスtype(x) == type(dict)には当てはまりません)。おそらく最も標準的な方法です。dictisinstance