跳转到主要内容

简单的枚举

项目描述

basicenum

简单的枚举。

basicenum.compat

从stdlib中重新实现(主要是API兼容性)的enum.Enum(以及相关代码)。

此模块的目标是在尽可能使用现代Python特性的同时,重新实现尽可能多的enum.Enum API。虽然这确实导致了一些API破坏(例如,type(enum.member) == type(enum)不再为真),但它主要围绕元类级别的细节。如果您依赖于enum.Enum的表面API,则此模块应该是兼容的。

API兼容性

使用枚举示例

class Colour(Enum):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

enum.Enum的兼容性是

功能 支持?
repr(Colour.RED)
str(Colour.RED)
type(Colour.RED) ❌ (使用Member代替)
isinstance(Colour.RED, Colour)
iter(Colour)
hash(Colour.RED)
Colour(1)
Colour["RED"]
Colour.RED in Colour
Colour.RED.name
Colour.RED.value
auto()
_generate_next_value_()
Colour.__members__
Colour.RED == Colour.RED
受限子类化
序列化
功能API ✅ (通过create()

类型检查

不幸的是,类型检查器硬编码了对enum.Enum的支持。这意味着它们不会识别basicenum.compat.Enum的成员作为Member的实例或匹配enum.Enum成员的API。

幸运的是,您可以欺骗类型检查器。您可以告诉它们在执行期间使用basicenum.compat的同时,将类型检查作为使用enum

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from enum import Enum, auto
else:
    from basicenum.compat import Enum, auto

基准测试

如果您安装了[benchmark]扩展,您可以使用richbench来查看enumbasicenum.compat之间的性能比较。

结果

在2015年早期发布的13英寸MacBook Pro(Retina)上

richbench --repeat 5 --times 5 --benchmark compat benchmarks/
基准 最小值 最大值 平均值 最小值 (+) 最大值 (+) 平均值 (+)
导入 0.374 0.503 0.422 0.117 (3.2倍) 0.120 (4.2倍) 0.119 (3.5倍)
使用 auto() 创建 0.422 0.429 0.425 0.075 (5.7倍) 0.077 (5.5倍) 0.076 (5.6倍)
_generate_next_value_() 0.373 0.383 0.376 0.077 (4.8倍) 0.078 (4.9倍) 0.078 (4.8倍)
使用常量创建 0.333 0.351 0.339 0.060 (5.5倍) 0.066 (5.4倍) 0.063 (5.4倍)
功能API 0.392 0.397 0.394 0.070 (5.6倍) 0.074 (5.4倍) 0.072 (5.5倍)
检查类型是否为 Enum 0.189 0.191 0.190 0.279 (-1.5倍) 0.282 (-1.5倍) 0.280 (-1.5倍)
迭代 Enum 0.912 0.922 0.917 0.197 (4.6倍) 0.199 (4.6倍) 0.198 (4.6倍)
创建 Enum(...) 0.297 0.297 0.297 0.078 (3.8倍) 0.079 (3.8倍) 0.078 (3.8倍)
创建 Enum[...] 0.121 0.122 0.121 0.075 (1.6倍) 0.139 (-1.1倍) 0.093 (1.3倍)
... 在 Enum 中 0.267 0.375 0.308 0.162 (1.6倍) 0.164 (2.3倍) 0.163 (1.9倍)
成员访问 0.333 0.337 0.334 0.118 (2.8倍) 0.121 (2.8倍) 0.119 (2.8倍)
值访问 0.735 0.761 0.744 0.141 (5.2倍) 0.143 (5.3倍) 0.142 (5.2倍)
相等 0.343 0.345 0.344 0.103 (3.3倍) 0.107 (3.2倍) 0.105 (3.3倍)
repr 0.379 0.386 0.382 0.236 (1.6倍) 0.238 (1.6倍) 0.237 (1.6倍)
哈希 0.345 0.355 0.348 0.245 (1.4倍) 0.250 (1.4倍) 0.247 (1.4倍)
序列化 0.270 0.272 0.271 0.270 (-1.0倍) 0.274 (-1.0倍) 0.272 (-1.0倍)
反序列化 0.229 0.232 0.231 0.230 (-1.0倍) 0.232 (-1.0倍) 0.231 (-1.0倍)
__members__ 0.373 0.381 0.376 0.046 (8.1倍) 0.047 (8.1倍) 0.046 (8.1倍)
@unique 0.518 0.523 0.520 0.104 (5.0倍) 0.109 (4.8倍) 0.106 (4.9倍)

模块内容

Enum

创建枚举的基类。

Member

所有枚举成员的实例所属的类。

auto()

自动、递增整数成员值的函数。

@unique

确保所有枚举成员都有唯一值。

如果值不是全部唯一的,将引发 ValueError

create()

enum.Enum 的功能API的重新实现。

def create(
    enum_name, member_names, /, *, module=None, qualname=None, type=None, start=1
): ...

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

basicenum-2023.1.tar.gz (6.8 kB 查看哈希)

上传时间

构建分布

basicenum-2023.1-py3-none-any.whl (6.8 kB 查看哈希)

上传时间 Python 3

由以下组织支持