Python的智能、Pythonic、临时的、类型多态性
项目描述
类
Python的智能、Pythonic、临时的、类型多态性。
特性
- 提供了一组原语来编写声明式业务逻辑
- 强制更好的架构
- 完全类型化,带有注解,并使用
mypy
检查,与PEP561兼容 - 允许在不使用继承或接口的情况下编写大量简单代码
- Pythonic,易于编写和阅读(!)
- 易于开始:拥有大量的文档、测试和教程
安装
pip install classes
您还需要正确 配置 mypy
并安装我们的插件来修复 此现有问题
# In setup.cfg or mypy.ini:
[mypy]
plugins =
classes.contrib.mypy.typeclass_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 covert 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])
'[false, 1, 2]'
并且很容易扩展这个类型类以适应您自己的类
>>> # 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'
这就是类型类简单、安全、强大的原因!请确保查看我们的文档了解更多信息。
许可证
BSD 2-Clause
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
kinds-0.0.1.tar.gz (4.7 kB 查看哈希值)
构建分布
kinds-0.0.1-py3-none-any.whl (4.0 kB 查看哈希值)
关闭
kinds-0.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 99e2b2a973c027de138f85dab4b5990c0b58c11848ca7b8913ac44769f0b6b6f |
|
MD5 | 3e120fd3465564bd2107768581693147 |
|
BLAKE2b-256 | b4e2b026c9b0d7d14afb0f9928cfb7f438cc53182a2064fac8cddcb2c5597fa6 |
关闭
kinds-0.0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f5bff6521f9255852a5a5d10de0f51aed3ab9f1d4fbdf0af1f3648c5ee740dcc |
|
MD5 | 77f6ffc380963d90757c14f430394e39 |
|
BLAKE2b-256 | 50dc361ce2fd219c553aaf3ae4f9b341a9d1d2a6621cab95e4f5eb5f15def9a9 |