私は現在、これを理解するために pdb trace にいます
ipdb> isinstance(var, Type)
False
ipdb> type(var)
<class 'module.Type'>
ipdb> Type
<class 'module.Type'>
なぜこれが起こることができますか?
PSは期待通りisinstance(var, type(var))
に戻るTrue
私は現在、これを理解するために pdb trace にいます
ipdb> isinstance(var, Type)
False
ipdb> type(var)
<class 'module.Type'>
ipdb> Type
<class 'module.Type'>
なぜこれが起こることができますか?
PSは期待通りisinstance(var, type(var))
に戻るTrue
私は推測することしかできませんが、あなたがそうするならmodule
class Type(object): pass
var = Type()
class Type(object): pass
両方のタイプは のように見えます<class 'module.Type'>
が、それでも異なります。
あなたはそれをチェックすることができます
print(id(Type), id(var.__class__))
または
print(Type is var.__class__)
これらの比較は、古いスタイルのクラスと新しいスタイルのクラスの両方で機能することに注意してください。新しいスタイルのクラスの場合、それらはprint(Type is type(var))
. しかし、これは古いスタイルのクラスには当てはまりません。
別の非常に一般的なトラップは、このモジュールを次のように呼び出すことです。
python -m module
また
python module.py
モジュールとして知られるようにし__main__
ます。真の名前で別の場所にインポートされた場合、その名前と別の名前空間で認識されます。
別の推測として、ABC__instancecheck__()
を使用している、またはクラスにメソッドを持たせている可能性があります。