[英]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.