我有两个类具有相同名称的方法,但此方法使用不同的参数。所以我考虑使用**kwargs
(参见下面的示例)。但是这两种方法中的一种不需要任何参数,所以我得到了这个错误:
TypeError:print_smt()接受1个位置参数但是2个被赋予
因为它将空字典传递给函数,我想。
我该如何解决这个问题?我是否被迫使用if
语句来调用带有和不带参数的函数,或者有更好的方法来解决这个问题?
class Bar(object):
def print_smt(self, text):
print(text)
class Foo(object):
def print_smt(self):
print("Nothing")
def test(obj, **p2):
obj.print_smt(p2)
bar = Bar()
test(bar, text='print this')
foo = Foo()
test(foo) # This one breaks!
答案 0 :(得分:6)
致电时:
def test(obj, **p2):
obj.print_smt(p2)
...您已将字典传递给print_smt()
。即使它是一本空字典,它仍然是一本字典,你不能将字典作为参数传递给不带参数的东西。
如果要将关键字参数作为关键字参数传递,而不是作为带字典的单个位置参数,请执行以下操作:
def test(obj, **p2):
obj.print_smt(**p2)
答案 1 :(得分:2)
在将kwargs 传递给print_smt函数之前,你必须解压缩kwargs 。这有效:
def test(obj, **p2):
obj.print_smt(**p2)