2009-12-02 152 views
16

在Python 3.1,有一個新的內置功能,我沒有在builtins模塊中知道:Python的內建__build_class__做了什麼?

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

    Internal helper function used by the class statement. 

這是什麼功能呢?如果它是內部的,爲什麼它必須在內部? type(name, bases, dict)函數有什麼不同?

回答

18

編譯PEP 3115元類

Guido van Rossum said:

的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>是 類體一個函數對象。

+0

什麼是「該類身體機能對象」? – DeFazer 2016-12-03 17:09:58

+0

您可以在Guido van Rossum的鏈接文章的代碼示例中找到此信息。 '__build_class__'會調用'locals = {}; FUNC(當地人)'。 即,一類'類X:Y = 1',等效體功能''將是:'DEF FUNC(當地人):locals.y = 1' – daluege 2017-01-21 18:37:36