1

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'>)
4

4 に答える 4

2

これは実装の詳細ですが、値の内部表現でいくつかのデータを検査することによってそうしていると思います。

結局のところ、Python システムは、値に対して操作を行う方法を理解するために、各値の型を判別できなければなりません。

ドキュメントには、組み込み関数によって返される値を変更または変更する方法については言及されてtype()いないため、それを行うことはできないと思います。

于 2013-04-26T11:10:37.133 に答える