我有一類函數,需要「通過」特定關鍵字參數:直通關鍵字參數
def createOrOpenTable(self, tableName, schema, asType=Table):
if self.tableExists(tableName):
return self.openTable(tableName, asType=asType)
else:
return self.createTable(self, tableName, schema, asType=asType)
當我打電話吧,我得到這樣的錯誤:
TypeError: createTable() got multiple values for keyword argument 'asType'
有什麼辦法可以「傳遞」這樣的關鍵字參數嗎?
我想過幾個答案,但沒有一個是最佳的。從最差到最好:
我可以改變一個或多個功能的關鍵字的名字,但我想用相同的關鍵字的所有三種功能,因爲參數攜帶相同的含義。
我可以通過位置,而不是通過關鍵字傳遞
asType
參數,但如果我添加其他關鍵字參數openTable
或createTable
,我會記得要改變通話。我寧願它會自動適應,就像我可以使用關鍵字表單一樣。我可以在這裏使用
**args
表單而不是使用默認參數來獲取關鍵字參數的字典,但這似乎是使用大錘猛擊蒼蠅(因爲需要額外的代碼行來正確解析它)。
有沒有更好的解決方案?
D'哦正如!可能很明顯,我對Python還是個新手,感謝您指出了這個問題 – 2009-06-19 14:50:12
沒問題:) 雖然Python總體來說還是很不錯的,但是這些小小的「陷阱」中很少有這些會嚴重燒燬你當你第一次打他們。如果你還沒有定義一個沒有「自我」參數的方法,你會擊中的另一個......你的程序將死於一個非常有用的「不正確的參數數量」錯誤。 – 2009-06-19 16:29:49
是的,我早打了。幸運的是,我很快就接觸到了這個問題。 – 2009-06-20 02:23:15