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)
你打电话的时候:
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)
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |