2017-06-28 31 views

回答

1

显然就像使用字典解包(double star)运算符那样简单,在相应的attrs类实例化中。

例子:

>>> Coordinates(**{'x': 1, 'y': 2}) 
Coordinates(x=1, y=2) 
2

我做这在我的web应用程序,以便能够序列化/反序列化到JSON:

首先,我提出,返回更上我的课的方法序列化友好版本:

def asdict(self, serializable=True): 
    if serializable: 
     as_dict['type'] = self.__class__.__name__ 
     return as_dict 
    else: 
     return attr.asdict(self) 

然后,当我需要将其中一个字典(实际的JSON对象)转换回类inst ance:

obj_type = values.pop('type') 
if obj_type in obj_list: 
    obj = getattr(sys.modules[__name__], obj_type)(**values) 
+0

据我所知,你的解决方案需要一个额外的状态,将携带的类型名称?另外,你不清楚你说的是什么类:“_I在我的classes_上做了一个方法”。无论哪种方式,我只收到我不能修改的python字典,但可以期待具体的键将它建模为简单的DTO以获得更多舒适的使用。 – misanthrope

+0

另外,@ patrick-shechetin可以为你的JSON字典动态创建** attrs ** DTOs提供一个通用方法。更重要的是,如果你有一个JSON模式,你不需要在有效载荷本身中携带一个类型名称。只要您可以确保您的字典根据具体类型的模式进行验证。您可以在我的其他[Q/A](https://stackoverflow.com/q/45770755/7598113)中找到关于_JSL_和_attrs_的更多信息。 – misanthrope