gpt4 book ai didi

python - 在 python 中以更简洁的方式创建具有可变属性的对象

转载 作者:行者123 更新时间:2023-11-28 21:48:38 25 4
gpt4 key购买 nike

我是 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)

来自 Java 领域,我知道 python 充满了速记,所以想知道是否有更简洁的方式来编写上述内容?当然,我的实际对象有更多的属性。我尝试搜索但找不到任何有用的东西,所以我怀疑它是否可能导致如果有超过 2 个变量属性则无法扩展。

最佳答案

一种方法是使用 double-star operator ,像这样:

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)

简而言之:您使用关键字参数构造一个字典,然后将以 ** 开头的字典传递给可调用对象。

但是,None 经常(并非总是)用作可选参数的默认值。 可能这也会起作用:

return MyObj(name=name, obj_one=self.obj_one, obj_two=self.obj_two)

没有任何 if 之类的东西。

关于python - 在 python 中以更简洁的方式创建具有可变属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com