0

これが私が理解できないコードの一部です:

class COWMeta(type):
    pass

class COWDictMeta(COWMeta):
    ....

私はPythonで新しいクラスを作成する方法を知っています:

class MyClass(BaseClass):
    ...

しかし、マニュアルに記載されているように、「type」は関数です。

type(...)モジュール
の機能 type(object)->オブジェクトのtype type(name、bases、dict)->新しいtype __builtin__

クラスはどのようにして関数から継承できますか?そして、そのコードはどういう意味ですか?

4

2 に答える 2

4

typePythonの基本的なオブジェクトタイプです。Pythonの多くのオブジェクト型と同様に、新しい型を作成するためのコンストラクターとして機能しますが、最も単純な形式では、既存のオブジェクトの型を返します。その場合、それは関数のように見えます。たとえば、これint()をとと比較してください。list()

Pythonでは、メタクラスとも呼ばれる新しい型を作成できるため、Pythonであらゆる種類の強力で興味深いトリックを実行できます。クラス定義に基づくtypeということは、新しいメタクラスを作成していることを意味します。

Pythonのメタクラスとは何ですか?を参照してください。メタクラスとは何かについての詳細な回答。

于 2012-08-14T08:42:05.027 に答える
2

typeは、次のように関数ではありません。

def foo():
    pass

関数です。これは関数のように (そして Python の他の多くのオブジェクトのように) 呼び出すことができますが、実際にはクラスとしてコーディングされています。typeそれ自体がこの違いを示すことができます:

>>> type(type)
<class 'type'>
>>> type(foo)
<class 'function'>

ドキュメントでは、実装方法ではなく、一般的な使用方法のために「関数」と呼んでいます。これは、たとえば、itertools.permutationsドキュメントによって関数を明示的に呼び出されていませんが、関数であること暗示されている に広く似ています。

iterable 内の要素の連続した r の長さ順列を返します。

しかしitertools.permutations、クラスとして実装されています:

>>> type(itertools.permutations)
<class 'type'>
于 2012-08-14T08:45:12.340 に答える