编程语言
首页 > 编程语言> > python – 如何使** kwargs可选

python – 如何使** kwargs可选

作者:互联网

我有两个类具有相同名称的方法,但此方法使用不同的参数.所以我想到了使用** kwargs(见下面的例子).但是这两种方法中的一种不需要任何参数,所以我得到这个错误:

TypeError: print_smt() takes 1 positional argument but 2 were given

因为我想将空字典传递给函数.

我怎么解决这个问题?我是否被迫使用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!

解决方法:

你打电话的时候:

def test(obj, **p2):
  obj.print_smt(p2)

…你正在将字典传递给print_smt().即使它是一个空字典,它仍然是一个字典,你不能将字典作为参数传递给不带参数的东西.

如果要将关键字参数作为关键字参数传递,而不是作为带字典的单个位置参数,则执行以下操作:

def test(obj, **p2):
  obj.print_smt(**p2)

标签:kwargs,python,optional-parameters
来源: https://codeday.me/bug/20190724/1527553.html