type
単一の引数が渡されたとき、関数は渡されたオブジェクトの型をどのように決定しますか?
また、オブジェクトの class
定義に特定の変更を加えることで、返されるものをカスタマイズすることは可能ですか?
編集:
object.__class__
クラスの関数をオーバーライドして__getattribute__
クエリを実行すると任意の値が返されるにもかかわらず__class__
、型がチェックされたときに実際の型が返されるため、属性を使用しているとは思えませんtype
。
>>> class Foo(object):
... def __getattribute__(self, name):
... if name == "__class__":
... return type("Bar", (), {})
... else:
... return super(Foo, self).__getattribute__(name)
...
>>> bar = Foo()
>>> bar.__class__ , type(bar)
(<class '__main__.Bar'>, <class '__main__.Foo'>)