Python的Smart、pythonic、adhoc、类型化多态性

kinds的Python项目详细描述


班级

classes logo


Build StatusCoverage StatusDocumentation StatusPython Versionwemake-python-styleguideChecked with mypy


Python的智能、pythonic、ad-hoc、类型多态性。在

特点

  • 提供一组用于编写声明性业务逻辑的原语
  • 实施更好的体系结构
  • 带注释的完整类型,并用mypyPEP561 compatible进行检查
  • 允许编写大量没有继承或接口的简单代码
  • Python般的和愉快的写和读(!)在
  • 易于启动:有很多文档、测试和教程

安装

pip install classes

你还需要configuremypy正确安装插件 要修复this existing issue

^{pr2}$

如果没有此步骤,,您的项目将到处报告类型冲突。在

我们还建议使用相同的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条款

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

推荐PyPI第三方库


热门话题
Ruby/Java中的OData提供程序   Java Box类中的方法   java NoClassDefFoundError:scala/math/Ordering with springkafkatest 2.5.7   如何读取本地Java软件中交换的协议消息?   java为Android webview隔离网站DIV   java Tomcat使用HSQLDB数据库部署应用程序,提供JDBCConnectionException   检查可选和返回字符串Java Stream API中是否存在null属性   JavaJMS队列轮询示例   来自Java的Windows 10上的通知   java IllegalArgumentException:布局:showcaseview中的998896<0   java如何克隆同步的集合?   java如何根据您在上一个活动中所做的操作显示另一个活动的对话框   数据库中的java更新项,但未在ContentValues中设置所有列