簡體   English   中英

如何使** kwargs可選

[英]How to make **kwargs optional

我有兩個類具有相同名稱的方法,但此方法使用不同的參數。 所以我想到了使用**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!

你打電話時:

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

...你正在將字典傳遞給print_smt() 即使它是一個空字典,它仍然是一個字典,你不能將字典作為參數傳遞給不帶參數的東西。


如果要將關鍵字參數作為關鍵字參數傳遞,而不是作為帶字典的單個位置參數,則執行以下操作:

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

你必須在將kwargs傳遞給print_smt函數之前解壓縮它。 這有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM