私は現在これを理解するためにpdbトレースを行っています
ipdb> isinstance(var, Type)
False
ipdb> type(var)
<class 'module.Type'>
ipdb> Type
<class 'module.Type'>
なぜこのようなことが起こるのでしょうか?
PSは予想通りにisinstance(var, type(var))
戻るTrue
ベストアンサー1
推測することしかできませんが、もしあなたが
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__
。別の場所でその本当の名前でインポートされた場合、別の名前空間でもその名前で認識されます。もう一つの推測としては、あなたがABCsまたは、クラスに
__instancecheck__()
メソッドを持たせます。