使用 **kwargs 和默认值很容易。但是有时候,你并不应该首先使用 **kwargs。
在这种情况下,我们并没有真正充分利用 **kwargs。
class ExampleClass( object ):
def __init__(self, **kwargs):
self.val = kwargs.get('val',"default1")
self.val2 = kwargs.get('val2',"default2")
上面的声明是一个"无需费心"的声明。它与以下内容相同:
class ExampleClass( object ):
def __init__(self, val="default1", val2="default2"):
self.val = val
self.val2 = val2
使用 **kwargs 时,表示关键字参数不仅是可选的,而且是有条件的。比简单的默认值更复杂的规则适用。
使用 **kwargs 时,通常意味着类似下面这样的情况,简单的默认值不适用。
class ExampleClass( object ):
def __init__(self, **kwargs):
self.val = "default1"
self.val2 = "default2"
if "val" in kwargs:
self.val = kwargs["val"]
self.val2 = 2*self.val
elif "val2" in kwargs:
self.val2 = kwargs["val2"]
self.val = self.val2 / 2
else:
raise TypeError( "must provide val= or val2= parameter values" )
__init__()
中使用kwargs被pylint认为是不好的做法?有人能解释一下吗? - hughdbrownself.__dict__update(**kwargs)
可以重新定义方法并导致其他错误。 - Tobias Kienzler