一つの方法は、両方ともcallable
であり、両方が(いずれにせよ、CPythonの中で)Cで実装されているもののことで、dict
はtype
あります。つまり、isinstance(dict, type) == True
です。これは、あなたが書くことができ、他のタイプの基本クラスとしてdict
を使用できることを意味します
class MyDictSubclass(dict):
pass
なく
class MySumSubclass(sum):
pass
これは、ほとんどの組み込みオブジェクトのように動作するクラスを作成することが有用であることができ、しかしいくつかの機能拡張があります。
class Vector(tuple):
def __add__(self, other):
return Vector(x + y for x, y in zip(self, other))
別の興味深いポイントが表示されます:たとえば、あなたの代わりに連結のベクトル加算として+
実装tuple
のサブクラスを定義することができます。 type
もC言語で実装されています。呼び出し可能です。 dict
(sum
とは異なります)のように、それはtype
のインスタンスです。 isinstance(type, type) == True
。この奇妙な、一見不可能なサイクルのために、type
は、新しいクラスのクラス(メタクラスと呼ばれる)の作成に使用できます。 Pythonの3で、
class MyTypeSubclass(type):
pass
class MyClass(object):
__metaclass__ = MyTypeSubclass
のか:あなたは書くことができ、興味深い結果isinstance(MyClass, MyTypeSubclass) == True
それを与える
class MyClass(metaclass=MyTypeSubclass):
pass
を。しかし、これがどのように役立つかは、この答えの範囲をはるかに超えています。コンストラクタdict.__init__
dir(dict.__init__)
にdir
を呼び出す
[関数のように見え、関数のように振る舞う場合は関数です] (http://stackoverflow.com/a/4205163/489590)、そうですか? –
'dir()'は、利用可能な関数の完全な概要を与えることは決して意図されていなかったことに注意してください。 'dir(type)'はあなたに多くの同じ機能を与えます。 –
私は、これらの点が機能よりもクラスの方向にあることには同意します。結局のところ、 'dict'が純粋な関数であれば動作しないisinstance(x、dict)のようなことができます。 – Alfe