2015-04-23 56 views
1

** kwargs我剝了下來我的問題進入了最簡單的代碼:在開箱__init__

class Billy: 
    def __init__(self, **kwargs): 
     pass 

Billy({'a': 1, 'b': 2}) 

這是在Python 3.4.3和2.7.6,和我有一些代碼看起來與此在正常工作的其他腳本中。我把我的頭髮拉出來試圖瞭解這裏有什麼問題。它不斷給我一個TyperError抱怨說我使用了錯誤的參數個數:

TypeError: __init__() takes 1 positional argument but 2 were given 

回答

0

這裏的困惑是,{'a': 1, 'b': 2}是提供給單個實體構造函數作爲第一個參數,因此它是一個位置參數。您將需要以添加*args

class Billy: 
    def __init__(self, *args, **kwargs): 
     pass 

或提供其作爲Billy(a=1, b=2)或做什麼TigerhawkT3表明,添加**解壓字典。

+0

謝謝你(以及你Tigerhawk),現在很清楚。 –

1

嘗試增加**

>>> Billy(**{'a': 1, 'b': 2}) 
<__main__.Billy object at 0x00000000023E29B0>