2016-04-28 32 views
0

我調用了參數s = 1,t = 2,y = 3,但沒有p的構造函數。因爲p沒有定義,所以沒有設置。我曾考慮使用*而不是**,但我仍然希望使用關鍵字。如何在Python構造函數中分配關鍵字可變參數?

class Creator(object): 

    def __init__(self, **kwargs): 
     if len(kwargs) > 1: 
      self.scenario = kwargs.pop('s') 
      self.t = kwargs.pop('t') 
      self.y = kwargs.pop('y') 
      self.p = kwargs.pop('p') 

如何可以解析我已經選擇(即無功功率(kw)參數)的參數,而忽略了那些我沒有通過的分配?

+0

_Because P,它不SET_相反地,它**被設置爲「無」。另外,'scenario'局部變量顯然會破壞一個模式,如果沒有清晰的模式,則不能編寫通用代碼來將kwargs重新分配給實例變量。你能否通過解析所有參數來確定你的意思嗎? –

+0

當我試圖分配密鑰時,我收到一個'KeyError:' – noumenal

+0

@Rogalski編輯回覆 – noumenal

回答

1

由於kwargs只不過是字典,所以可以使用所有的字典方法。

尤其是,如果您想從中檢索潛在缺失值,可以使用dict.get

Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.

所以代碼看起來如下:

self.p = kwargs.get('p') # self.p will be None if "p" is not in kwargs 
self.p = kwargs.get('p', MY_VALUE) # self.p will be MY_VALUE if "p" is not in kwargs 

另外,入會標準檢查會做得很好:沒有定義

if 'p' not in kwargs: 
    pass # do something 
相關問題