我有這樣的事情:MyClass(BaseClass): def __init__(self, *args, **kwargs): data = kwargs.pop('data', None) super(BaseClass, self).__init__(*args, **kwargs)BaseClass是API包裝器的表示形式,它的init方法接收很多參數,例如API_KEY,API_SECRET,OAUTH_TOKEN和OUATH_TOKEN_SECRET。我的問題是有關創建MyClass實例的正確或最干凈的方法是什么。我不知道這是否行得通:if __name__ == '__main__': obj = MyClass( API_KEY, API_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET, {'data': DATA} )因此,讓我們假設它可行,將所有參數打包到dict中并將它們傳遞給MyClass更好嗎?
1 回答

侃侃無極
TA貢獻2051條經驗 獲得超10個贊
**kwargs接受關鍵字參數,而不是字典:
obj = MyClass(
API_KEY,
API_SECRET,
OAUTH_TOKEN,
OAUTH_TOKEN_SECRET,
data=DATA
)
當然,您可以使用**kwargs調用約定將字典仍然用作關鍵字參數:
obj = MyClass(
API_KEY,
API_SECRET,
OAUTH_TOKEN,
OAUTH_TOKEN_SECRET,
**{'data': DATA}
)
是否將其余參數打包到關鍵字參數中,完全取決于上的原始方法BaseClass。它接受那些參數作為關鍵字參數嗎?在Python 3中,這不一定是給定的,內置的(C定義的)函數和方法也不總是接受關鍵字參數而不是位置參數。
添加回答
舉報
0/150
提交
取消