类型化、声明性数据结构

tdds的Python项目详细描述


Build StatusPyPI version

这个包为Python2.7和python3.5+提供了不可变的数据类

概要

通过列出类的字段和每个字段的类型来声明类

>>>fromtddsimportField,Record,seq_of>>>classTrack(Record):...title=str...total_seconds=int......@property...defduration_str(self):...return'%d:%02d'%(self.total_seconds/60,self.total_seconds%60)>>>classAlbum(Record):...artist=str...title=str...year=Field(int,check=lambdavalue:1900<value<2050)...tracks=seq_of(Track)

实例化它并正常访问它的字段

^{pr2}$

记录对象是不可变的、散列的和可比较的。在

>>>album.artist='Schwah-schwah'Traceback(mostrecentcalllast):...tdds.basics.RecordsAreImmutable:Albumobjectsareimmutable>>>Track(title='Hull',total_seconds=7)==Track(title='Hull',total_seconds=7)True>>>Track(title='Hull',total_seconds=7)==Track(title='Hold',total_seconds=8)False

如果每个类型的值都被声明为

>>>Track(title='Fireworks',total_seconds='9')Traceback(mostrecentcalllast):...tdds.basics.FieldTypeError:Track.total_secondsshouldbeoftypeint,notstr('9')

有一些函数可以与普通的旧数据结构进行转换,也就是说,只有列表和dict。这对于JSON序列化非常有用。在

>>>pods=album.record_pods()>>>print(json.dumps(pods,indent=4,sort_keys=True)){"artist":"Wah-wah","title":"Gyroscope","tracks":[{"title":"Elevon","total_seconds":209},{"title":"Gear","total_seconds":514},{"title":"Stringer","total_seconds":413}],"year":2000}>>>Album.from_pods(album.record_pods())==albumTrue

记录也是可选择的

>>>pickle.loads(pickle.dumps(album))==albumTrue

该库提供了更多功能,如自动类型强制、自定义验证函数、枚举字段、类型化集合, 还有更多。请参阅tests目录以获取分类规范。在

另请参见

这个项目在精神上与其他优秀图书馆相似:

但这个是我的。在

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

推荐PyPI第三方库


热门话题
javascript节点js require()和Rhino Shell load()之间的区别是什么?   While循环中的java If语句   java GXT如何在XTemplate中显示treeobject?   如何将黑白图像加载到二进制文件中?   java ORMLite不知道如何存储班级航班。扫描仪。modelFX。机场航空公司的AirlineFx。使用另一个类或自定义持久器   java组织。阿帕奇。德比。客户是SqlException JSP和JSTL查询   spring如何将clob数据分配给java变量   java从上的表获取数据(Spring)   javaphp使用Exec执行带有用户定义参数的Jar文件   java jsonschema2pojo:引用相同类型的对象   使用原语从Scala调用Java vararg方法   java ClassNotFoundException:ClientBuilder Jersey 2.25.1 Tomcat 9.0   Android(Java)cr_BindingManager:无法调用determinedVisibility()从未看到pid的连接:   Java使用LocalTime类比较没有日期的时间   Java如何初始化对象的参数?