x.__class__
Pythonインタープリターでは、との値type(x)
は同等であると常に信じていました。しかし、次のことを行うと(Python 2.7、3.3、およびPyPy 2.0b1でも):
>>> import weakref
>>> x = set()
>>> y = weakref.proxy(x)
>>> x.__class__, isinstance(x, set), type(x)
(<type 'set'>, True, <type 'set'>)
>>> y.__class__, isinstance(y, set), type(y)
(<type 'set'>, True, <type 'weakproxy'>)
y.__class__
のラップされたタイプに対応していることがわかりますweakref.proxy
(これはweakref.proxy
、変装の属性を置き換えるだけだと思います)。としてもisinstance
識別y
しset
ます。
しかしtype
、「真の」タイプを示しています- weakproxy
。それで、引数の型を識別するために属性をtype
使用しませんか?__class__
この目的のために「より信頼性の高い」ソースを使用していますか?もしそうなら、私たちはそれに直接アクセスできますか?