严格听写

strictus-dictus的Python项目详细描述


pip install strictus-dictus

StrictusDictus(又名sdict)是特殊dict子类的基类,其实例只接受 在类的类型提示中声明的键。

这对于数据传输对象定义很有用,例如,当您表达其他人的 代码中的json或yaml模式,并希望使用点表示法访问解析字典的内容 并让ide自动完成属性名。

sdict适合嵌套结构。

fromstrictus_dictusimportsdictclassHeader(sdict):title:str="Hello, world!"# default valuesent:strclassTag(sdict):value:strclassMessage(sdict):header:Headerbody:strtags:List[Tag]source={"header":{"sent":"2018-10-20 18:09:42",},"body":"What is going on?","tags":[{"value":"unread",},],}# Parse the messagemessage=Message(source)# Access attributesassertmessage.header.title=="Hello, world!"assertmessage.tags[0].value=="unread"# It still is a dictionary so this works too:assertmessage["header"]["title"]=="Hello, world!"# Convert back to a standard dictionarymessage.to_dict()

这些键的值可以作为带有点符号和[]符号的属性访问, 但是,如果源字典缺少键,StrictusDictus将不会引入它,因此访问 via[]符号将按预期引发一个KeyError。 但是,属性将被初始化以保存特殊的EMPTY值。

要创建实例,请使用YourClass(standard_dict)并导出到标准字典 使用YourClass().to_dict()

StrictusDictus只支持有限的类型提示集。不支持的类型提示将 将被静默忽略,值将返回未处理。

支持的类型提示是(SD表示从StrictusDictus继承的任何类):

classExamples:x1:primitive_type# could be any type, but not from typing.*; value won't be processedx2:List# unprocessed listx3:Dict# unprocessed dictionaryx4:SDx5:List[SD]x6:Dict[str,SD]

可以用List[Any]Dict[Any, Any]注释x,但不会处理这些值 通过StrictusDictus

限制

  • sdict子类不能在其类型提示中引用自身(甚至不能使用前向引用)。

数据类?

数据类是一个很好的构建块,但它并不认真对待字典。

@dataclasses.dataclassclassPoint:x:floaty:float@dataclasses.dataclassclassLine:start:Pointend:Pointline=Line(**{"start":{"x":1,"y":1},"end":{"x":5,"y":5}})

我希望line.end.y保存值5,但事实并非如此。实际上,print(line.end.y) 引发一个AttributeError

AttributeError:'dict'objecthasnoattribute'y'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中查找一个数的所有因子?   java libGDX绘制纹理区域的一部分   要生成的windows Java编译器选项。exe文件   JFrame中标题栏中的java字幕   java为非java应用程序创建jar文件。类文件   java活动流在应用程序加载时在面板中生成X个数量的对象   java GAE:隐藏敏感网站文件/信息   java使用itext以编程方式单击PDF XFA表单上的按钮   java组件大小问题!由于我不知道的原因,调整到父级大小!   JOptionPane中的java更新消息   Eclipse启动时java启动Tomcat?   java如何使用CameraKit保存照片和视频   java中的XML文档遍历器   java如何在ECDSA中处理基址顺序较长的短哈希   java与MySQL和Netbeans的斗争