Python的Smart、pythonic、adhoc、类型化多态性
kinds的Python项目详细描述
班级
Python的智能、pythonic、ad-hoc、类型多态性。在
特点
- 提供一组用于编写声明性业务逻辑的原语
- 实施更好的体系结构
- 带注释的完整类型,并用
mypy
,PEP561 compatible进行检查 - 允许编写大量没有继承或接口的简单代码
- Python般的和愉快的写和读(!)在
- 易于启动:有很多文档、测试和教程
安装
pip install classes
你还需要configuremypy
正确安装插件
要修复this existing issue:
如果没有此步骤,,您的项目将到处报告类型冲突。在
我们还建议使用相同的mypy
设置we use。在
确保你知道如何开始,check out our docs!在
示例
设想一下,您希望将实现绑定到某个特定类型。 比如,字符串是这样的,数字是这样的,等等。在
一个好的现实世界例子是djangorestframework
。
围绕着不同的想法
数据类型应以不同的方式转换为json
格式。在
什么是“传统的”(如果你愿意的话,还是过时的!)接近? 为不同的数据类型创建大量的类并使用它们。在
我们就这样结束了这样的课程:
classIntField(Field):deffrom_json(self,value):returnvaluedefto_json(self,value):returnvalue
它确实有很多问题:
- 很难键入这个代码。如何确保我的
json
将被给定的模式解析?在 - 它包含了很多样板文件
- 它有复杂的API:通常有几个方法要重写,一些字段需要调整。此外,我们使用一个类,而不是一个可调用的类
- 很难为您自己项目中的新自定义类型扩展默认库
应该有更好的方法来解决这个问题! 打字课是更好的方法!在
新的API在这个概念下会是什么样子?在
>>>fromtypingimportUnion>>>fromclassesimporttypeclass>>>@typeclass...defto_json(instance)->str:..."""This is a typeclass definition to covert things to json."""...>>>@to_json.instance(int)...@to_json.instance(float)...def_to_json_int(instance:Union[int,float])->str:...returnstr(instance)...>>>@to_json.instance(bool)...def_to_json_bool(instance:bool)->str:...return'true'ifinstanceelse'false'...>>>@to_json.instance(list)...def_to_json_list(instance:list)->str:...return'[{0}]'.format(...', '.join(to_json(list_item)forlist_itemininstance),...)...
了解使用类型和实现有多容易?在
Typeclass表示为常规函数,因此您可以像使用常规函数一样使用它:
>>>to_json(True)'true'>>>to_json(1)'1'>>>to_json([False,1,2])'[false, 1, 2]'
用自己的类来扩展这个typeclass也很容易:
>>># Pretending to import the existing library from somewhere:>>># from to_json import to_json>>>importdatetimeasdt>>>@to_json.instance(dt.datetime)...def_to_json_datetime(instance:dt.datetime)->str:...returninstance.isoformat()...>>>to_json(dt.datetime(2019,10,31,12,28,00))'2019-10-31T12:28:00'
这就是TypeClass的简单、安全和强大! 确保check out our docs了解更多信息。在
许可证
BSD 2条款
- 项目
标签: