2014-01-26 80 views
3

我注意到這個從__build_class__文檔字符串:類「關鍵字參數」在Python 3

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

Internal helper function used by the class statement. 

激起我興趣是**kwds兩個部分。類定義可以使用關鍵字參數嗎?我試過了,但是我得到了一個非常奇怪的錯誤:

>>> class Test(a=1): 
...  pass 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: type() takes 1 or 3 arguments 

這裏的交易是什麼? Python 3中的類可以以某種方式接受關鍵字參數?也許需要一個特殊的元類?

回答

3

Can classes in Python 3 somehow accept keyword arguments?

是的。除metaclass之外的class語句中的任何關鍵字參數都傳遞給元類。如果指定metaclass參數,則將其用作元類;否則,元類是type。有關更多詳細信息,請參閱PEP 3115

+0

我明白了。假設這只是爲了新的'metaclass ='語法而實現的,因爲我認爲只需使用一個元類工廠就可以實現同樣的事情,比如'class MyClass(metaclass = get_metaclass(** kwargs))'。 – asmeurer