簡體   English   中英

在__init__中打開** kwargs

[英]Unpacking **kwargs in __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

嘗試添加**

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

這里的混亂之處在於{'a': 1, 'b': 2}是作為第一個參數提供給構造函數的單個實體,因此它是一個位置參數。 您將需要添加*args

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

或將其提供為Billy(a=1, b=2)或按照TigerhawkT3的建議進行操作,並添加**以解壓縮字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM