在python中以更干净的方式创建具有变量属性的对象

noM*_*MAD 2 python

我是python的新手,我不得不创建一个只有某些属性的对象None.例:

if self.obj_one is None and self.obj_two is None:
    return MyObj(name=name)
elif self.obj_one is not None and self.obj_two is None:
    return MyObj(name=name, obj_one=self.obj_one)
elif self.obj_one is None and self.obj_two is not None:
    return MyObj(name=name, obj_two=self.obj_two)
else:
    return MyObj(name=name, obj_one=self.obj_one, obj_two=self.obj_two)
Run Code Online (Sandbox Code Playgroud)

来自Java的土地,我知道python充满了短手,所以想知道是否有更清晰的方式来编写上述内容?当然,我的实际对象有更多的属性.我尝试搜索但找不到任何有用的东西,所以如果有可能或不存在,如果有超过2个变量属性则不会缩放.

And*_*ini 5

一种方法可能是使用双星运算符,如下所示:

kwargs = {'name': name}

if self.obj_one is not None:
    kwargs['obj_one'] = self.obj_one
if self.obj_two is not None:
    kwargs['obj_two'] = self.obj_two

return MyObj(**kwargs)
Run Code Online (Sandbox Code Playgroud)

简单来说:您使用关键字参数构造一个字典,然后将该字典前面**的字符传递给callable.

然而,None就是经常(并不总是)作为可选参数的默认值.可能这也会起作用:

return MyObj(name=name, obj_one=self.obj_one, obj_two=self.obj_two)
Run Code Online (Sandbox Code Playgroud)

没有任何if或那种东西.