我有一类函数,需要“通过”特定关键字参数:直通关键字参数
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