30

builtinsPython 3.1には、モジュールにわからない新しい組み込み関数があります。

__build_class__(...)
    __build_class__(func, name, *bases, metaclass=None, **kwds) -> class

    Internal helper function used by the class statement.

この関数は何をしますか?内部にあるのに、なぜ組み込みである必要があるのですか?type(name, bases, dict)機能の違いは何ですか?

4

1 に答える 1

29

PEP3115メタクラスのコンパイル

グイドヴァンロッサムは言った:

PEPは、クラスステートメントがキーワード引数、、、 構文*args、および**kwds位置ベースを受け入れることを提案しています。これはコンパイルと実行が少し面倒ですが、もちろん、通常の関数を呼び出すためのコードにはすでにこれがあります。

したがって、これを、という名前の新しい(非表示の)組み込み関数の呼び出しに含めることは許容できると思います __build_class__。次に、このクラス定義:

  class C(A, B, metaclass=M, other=42, *more_bases, *more_kwds):
    ...

これに変換されます:

  C = __build_class__(<func>, 'C', A, B, metaclass=M, other=42,
*more_bases, *more_kwds)

ここ<func>で、はクラス本体の関数オブジェクトです。

于 2009-12-02T13:44:54.933 に答える