从 dataclass 转到 dict 可以用 asdict 函数 , 反向转换的时候 就比较困难. 不用外部的包的情况下, 提供一种思路.

def mask(v, d): #v 是 dict 数据, d 是 @dataclass 类型
if isinstance(v, d):
pass
elif isinstance(v, Dict):
x = [v.get(k, None) for k in [i for i in d.__dict__['__annotations__']]]
y = list(d.__init__.__defaults__)
if len(y) > 0:
n = len(x)
m = len(y)
for i in range(m):
if x[n-m+i] is None:
x[n-m+i] = y[i]
x = tuple(x)
v = d(*x)
else:
v = None
return v

以上是转换用的函数, 用于处理 输入参数为dict形式

from dataclasses import dataclass, asdict
from typing import Dict
def mask(v, d): #v 是 dict 数据, d 是 @dataclass 类型
if isinstance(v, d):
pass
elif isinstance(v, Dict):
x = [v.get(k, None) for k in [i for i in d.__dict__['__annotations__']]]
y = list(d.__init__.__defaults__)
if len(y) > 0:
n = len(x)
m = len(y)
for i in range(m):
if x[n-m+i] is None:
x[n-m+i] = y[i]
x = tuple(x)
v = d(*x)
else:
v = None
return v
@dataclass
class ddd:
a: str
c: str = ""
b: str = ""
@dataclass
class bbb:
a: str
b: ddd = None
c: str = ""
def __post_init__(self):
self.b=mask(self.b,ddd)
@dataclass
class aaa:
a: str
b: str
c: bbb = None
def __post_init__(self):
self.c=mask(self.c, bbb)
if __name__=="__main__":
x = aaa(1, 2, {'a': 4, 'b': {'a':6,'c':7}})
y = asdict(x) print(mask(y,aaa))

结果是 :

aaa(a=1, b=2, c=bbb(a=4, b=ddd(a=6, c=7, b=''), c=''))

从 Dict 转到 Dataclass的更多相关文章

  1. Python3.7 dataclass 介绍

    Posted on 2018年6月28日 by laixintao 1 Comment Python3.7 加入了一个新的 module:dataclasses.可以简单的理解成“支持默认值.可以修改 ...

  2. tuple放入dict中

    tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...

  3. redis数据结构存储Dict设计细节(redis的设计与实现笔记)

    说到redis的Dict(字典),虽说算法上跟市面上一般的Dict实现没有什么区别,但是redis的Dict有2个特殊的地方那就是它的rehash(重新散列)和它的字典节点单向链表. 以下是dict用 ...

  4. python list dict 去重的两种方式

    def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...

  5. list,tuple,dict,set常用方法

    Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...

  6. python dict clear只能删除一层,不能够递归删除。

    void PyDict_Clear(PyObject *op) { dictobject *mp; dictentry *ep, *table; int table_is_malloced; Py_s ...

  7. Python中内置数据类型list,tuple,dict,set的区别和用法

    Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...

  8. python第一天 - dict

    dict key-value集合. d = { ': 'a', ': 'b', ': 'c' } (一).获取集合长度:len(d) = 3(二).获取值: 方式一:d[key];例:d['1'] = ...

  9. python利用dict模拟switch

    pytho本身并未提供switch语句,但可以通过dict来模拟switch, #方法1 def add(x,y): return x+y def dec(x,y): return x-y def m ...

  10. python-list tuple dict set

    1:删除一个列表末尾的元素 pop方法 >>> a [1, 'Jack', 2, 3, 2] >>> a.pop() >>> a [1, 'Jac ...

随机推荐

  1. 算法~PBKDF2-SHA让密码更安全

    摘要:在当今的数字世界中,密码安全是至关重要的.为了保护用户密码免受未经授权的访问和破解,Password-Based Key Derivation Function 2 (PBKDF2)算法成为了一 ...

  2. 在IDEA中配置GitHub

    目录 在IDEA中配置GitHub 安装GitHub插件 账号授权 方法一:点击Add Account... 添加账号 方法二:使用token登录 共享到GitHub 查看文件变更列表 add文件 移 ...

  3. golang基础之结构体

    匿名结构体 在定义一些临时数据结构等场景下还可以使用匿名结构体. 在函数体内 package main import ( "fmt" ) func main() { //方法一 v ...

  4. C#.Net筑基-基础知识

    01.C#基础概念 1.1.C#简介 C# (读作C Sharp)是由微软公司开发的一种面向对象.类型安全.高效且简单的编程语言,最初于 2000 年发布,并随后成为 .NET 框架的一部分.所以学习 ...

  5. ansible系列(28)--ansible的playbook异常处理

    目录 1. playbook的异常处理 1.1 Playbook错误忽略 1.2 task执行失败强制调用handlers 1.3 控制Tasks报告状态为OK 1.4 changed_when检查任 ...

  6. java后台@RequestBody和@RequestParam

    RequestBody 接收的是请求体里面(body)的数据 RequestParam接收的是key-value里面的参数,所以它会被切割进行处理从而可以是普通元素.数组.集合.对象等接收 get-- ...

  7. The attempt was made from the following location: com.ruoyi.framework.config.ResourcesConfig.corsFilter(ResourcesConfig.java:57)

    报错信息: 8:42:12.529 [restartedMain] ERROR o.s.b.w.e.t.TomcatStarter - [onStartup,61] - Error starting ...

  8. windows安装nginx可视化工具nginxWebUI

    一.官网下载ngixn * 官网地址<http://nginx.org/> 选取稳定版(Stable Version)二.解压压缩包三.启动Nginx1.进入安装目录下,找到nginx.e ...

  9. angular自定义验证器实现所遇到的问题

    1:返回值问题 校验器 2:返回值类型 3:创建自定义指令配置注意 1:校验器 回过头来看一下表单校验的校验器.校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对 ...

  10. swagger 的配置

    1,开启swagger : c.IncludeXmlComments(GetXmlCommentsPath()); protected static string GetXmlCommentsPath ...