如何使**kwargs可选

Kur*_*aki 3 python optional-parameters kwargs

我有两个类具有相同名称的方法,但此方法使用不同的参数.所以我考虑使用**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!
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 7

你打电话的时候:

def test(obj, **p2):
  obj.print_smt(p2)
Run Code Online (Sandbox Code Playgroud)

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


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

def test(obj, **p2):
  obj.print_smt(**p2)
Run Code Online (Sandbox Code Playgroud)