** 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" )