これは古い質問ですが、それについて言及している回答はないようです。一般的なケースでは、新しいスタイルのクラスが と に対して異なる値を持つことは可能です:type(instance)
instance.__class__
class ClassA(object):
def display(self):
print("ClassA")
class ClassB(object):
__class__ = ClassA
def display(self):
print("ClassB")
instance = ClassB()
print(type(instance))
print(instance.__class__)
instance.display()
出力:
<class '__main__.ClassB'>
<class '__main__.ClassA'>
ClassB
その理由はClassB
、記述子をオーバーライドしているためですが__class__
、オブジェクトの内部型フィールドは変更されません。type(instance)
はその型フィールドから直接読み取るため、正しい値を返しますがinstance.__class__
、内部型フィールドを読み取る Python によって提供された元の記述子を置き換える新しい記述子を参照します。その内部型フィールドを読み取る代わりに、ハードコーディングされた値を返します。