Python のクラスで驚かされたこと


new-style class のことを調べていていまごろ気づいて、ちょっとびびったのでメモ。

それは、classic class のインスタンスの型は、それが属するクラスではないということ。

>>> class Foo: pass
... 
>>> type(Foo()) == Foo
False


もちろん、__class__ 属性のほうとは一致する(つか、しなかったらホラーだ(^_^;))。

>>> Foo().__class__ == Foo
True


ちなみに、new-style class ではそうしたある種の二重構造は解消されている。

>>> class Bar(object): pass
... 
>>> type(Bar()) == Bar
True


なるほどこれが段階的に進められている“型とクラスの統合”なのかと合点がいった瞬間。