Python的智能、Pythonic、临时、类型多态
项目描述
类
Python的智能、Pythonic、临时、类型多态。
特性
- 提供了一些原语来编写声明式业务逻辑
- 强制更好的架构
- 完全类型化,带有注释,并通过
mypy
检查,与PEP561兼容 - 允许在不使用继承或接口的情况下编写大量简单代码
- Pythonic,易于编写和阅读(!)
- 易于入门:拥有大量文档、测试和教程
安装
pip install classes
# 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'
类型类就是这样简单、安全、强大的!请确保查阅我们的文档以了解更多信息。[查看文档](https://github.com/dry-python/classes)
许可证
BSD 2-Clause
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
effects-0.0.1.tar.gz (10.8 kB 查看哈希值)
构建分发
effects-0.0.1-py3-none-any.whl (9.5 kB 查看哈希值)
关闭
effects-0.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1351ab247e2b2ebdbaf5cdaf088b255dd23ae6f30ae53c42a1bb367e47b5c59c |
|
MD5 | b89c3d5aea5667e7f5c3c15385a1f96a |
|
BLAKE2b-256 | ea1807a9caeb939646827c668783ce9d1f84971776132bd6d9f9be593027cd43 |
关闭
effects-0.0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c560fe2add5d90494da4172a1c74512aff4ce33cf0587ae3558a5ce6c3cc2970 |
|
MD5 | 176cb80b423f88da8599bc6671d55880 |
|
BLAKE2b-256 | f0dcbdf1b06c17efa8436c221c5fc6605ad80c351edf7cd759500ffc545d06c9 |