我面临以下问题。我有一堆输入,需要编写一个函数来实例化需要这些输入的子集的多个对象(数据类实例)。
所以我有这样的东西:
def create_objects(**kwargs):
# as you can see some attrs are used in different objects.
obj1 = Object1(attr1=kwargs.get("attr1"), attr2=kwargs.get("attr2"))
obj2 = Object2(attr3=kwargs.get("attr3"), attr2=kwargs.get("attr2"))
由于所有这些数据类都需要传递给它们的多个(2 到 10 个)属性,我想做一些魔术,例如检查 Object1 类是否具有在数据类中定义的某个属性:
obj1 = Object1(**{k: v for k, v in kwargs.items() if hasattr(Object1, k)})
显然这是行不通的。有没有办法以Python方式做到这一点?
或者有更好的方法吗?
最佳答案
您可能想看看 dacite library .
from dacite import from_dict
def create_objects(**kwargs):
obj1 = from_dict(data_class=Object1, data=kwargs)
obj2 = from_dict(data_class=Object2, data=kwargs)
只要将Config.strict
设置为False
(这是默认选项),它就会自动忽略其他字典键。
关于python - 从 **kwargs 实例化多个对象的 pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59543646/