智能、Pythonic、临时、Python类型多态
项目描述
classes
智能、Pythonic、临时、Python类型多态。
特性
- 提供了一组原语来编写声明式业务逻辑
- 强制更好的架构
- 完全类型化,使用注解并通过
mypy
检查,兼容 PEP561 - 允许在不使用继承或接口的情况下编写大量简单代码
- Pythonic,编写和阅读都很愉快(!)
- 易于入门:具有大量文档、测试和教程
安装
pip install classes
您还需要正确 配置 mypy
并安装我们的插件
# In setup.cfg or mypy.ini:
[mypy]
plugins =
classes.contrib.mypy.classes_plugin
不执行此步骤,您的项目将在各个地方报告类型违规。
我们还推荐使用我们相同的 mypy
设置 我们使用的。
确保您知道如何开始,查看我们的文档!
示例
想象一下,您想将实现绑定到某些特定的类型。例如,字符串的行为是这样,数字的行为是那样,以此类推。
一个好的真实世界示例是 djangorestframework
。它围绕这样的想法构建,即不同的数据类型应该以不同的方式转换为和从 json
格式。
“传统”(或者如果你愿意,过时!)的方法是什么?创建大量针对不同数据类型的类并使用它们。
这就是我们最终得到这样的类的原因
class IntField(Field):
def from_json(self, value):
return value
def to_json(self, value):
return value
这实际上有很多问题
- 编写此代码很难。我怎么能确保我的
json
可以由给定的模式解析? - 它产生了大量模板代码
- 它有一个复杂的API:通常有几个方法需要重写,一些字段需要调整。此外,我们使用的是类,而不是简单的函数
- 很难扩展默认库以适应您在自己的项目中创建的新自定义类型
- 很难重写
应该有更好的方法来解决这个问题!类型类就是一个更好的方法!
这个新API将是什么样的呢?
>>> from typing import Union
>>> from classes import typeclass
>>> @typeclass
... def to_json(instance) -> str:
... """This is a typeclass definition to convert things to json."""
>>> @to_json.instance(int)
... @to_json.instance(float)
... def _to_json_int(instance: Union[int, float]) -> str:
... return str(instance)
>>> @to_json.instance(bool)
... def _to_json_bool(instance: bool) -> str:
... return 'true' if instance else 'false'
>>> @to_json.instance(list)
... def _to_json_list(instance: list) -> str:
... return '[{0}]'.format(
... ', '.join(to_json(list_item) for list_item in instance),
... )
看看如何轻松地处理类型和实现?
类型类表示为一个常规函数,所以您可以像使用它一样使用它
>>> to_json(True)
'true'
>>> to_json(1)
'1'
>>> to_json([False, 1, 2.5])
'[false, 1, 2.5]'
并且很容易通过您自己的类扩展此类型类
# Pretending to import the existing library from somewhere:
# from to_json import to_json
>>> import datetime as dt
>>> @to_json.instance(dt.datetime)
... def _to_json_datetime(instance: dt.datetime) -> str:
... return instance.isoformat()
>>> to_json(dt.datetime(2019, 10, 31, 12, 28, 00))
'2019-10-31T12:28:00'
这就是类型类如此简单、安全和强大的原因!请确保查看我们的完整文档以获取更多信息。
更多!
想了解更多吗?前往文档! 或者阅读这些文章
— ⭐️ —
Drylabs 维护 dry-python 并帮助那些想在他们的组织中使用它的人。
更多信息请访问 drylabs.io
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
classes-0.4.1.tar.gz (28.8 kB 查看散列)
构建分发
classes-0.4.1-py3-none-any.whl (36.9 kB 查看散列)
关闭
classes-0.4.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 4de4fdd6c5c38607bbd8ad76703d7cc4dbe007cfa78e8ef1f62fc6ac55303e23 |
|
MD5 | 821fa17425c2a0ecba57d90f48296869 |
|
BLAKE2b-256 | 426c543dc06fcd4d076d1399978971ebedfb90a7bd4315a9d4357f080e73fcae |