支持多个等效名称的枚举器类型

multienum的Python项目详细描述


支持多个等效名称的枚举类型。

基本原理

我发现在python 3的内置类型enum中定义的类型是 笨拙而难以用于我的目的。此外,我还有一个项目 反复要求我将字符串解析为数字,然后返回到 有时会根据上下文使用不同的字符串。这个模块是 结果。

实现子类int,它允许 枚举存储在最小空间中,同时提供 用于将对象转换为不同名称的属性数。

用法

子类应该将类属性_members定义为 元组。[1]_members的每个成员都应该是一个字符串元组 包含等同于枚举值的名称。价值将是 从成员在元组中的位置推断(等于 下标)。可选地,子类可以定义_fields,一个字段元组 与枚举名称在 _members属性。

枚举值可以用纯int值或 _members中提供的名称,可以使用适当的字段名作为 一个关键字,或者,只要它在所有字段中都是唯一的,作为一个非关键字 争论。没有测试来确保名称是唯一的——如果一个名称 在_members元组中多次出现,行为未定义。

默认情况下,如果 该值被转换为字符串(例如,使用str()函数)。为了 与enum模块中的类型兼容,相同的值将是 使用name属性返回。其他名称作为 如果定义了_names属性中的元组,则 可用作对应于相关字段名的属性值 在_fields中。

如果实例化时给定了多个参数,则无论是否为关键字, 除非所有参数都解析为 同样的价值。

类型MultiEnum尝试成为等幂的,即,如果xMultiEnumx is MultiEnum(x)应该为真。但是,在本案中 在多个init值中,仅保留第一个值的幂等性。 位置参数。x is MultiEnum(a, x)将不是真的,即使 ax相等。

[1]Techincally, the ^{tt3}$ attribute, all members of ^{tt3}$, and the ^{tt5}$ attribute can be any iterable sequence. I strongly recommend tuples unless you have a reason not to, because in addition to being lightweight and simple, they’re immutable, which saves the interpreter a lot of work.

示例

>>> from multienum import MultiEnum
>>> class SampleEnum(MultiEnum):
...   _members = (("zero", "zip", "zéro", "cero"),
...               ("one", "ace", "une", "uno"),
...               ("two", "deuce", "deux", "dos"))
...   _fields = ('english', 'slang', 'french', 'spanish')
>>> val1 = SampleEnum("one")
>>> int(val1)
1
>>> str(val1)
'one'
>>> val1.name
'one'
>>> val1.spanish
'uno'
>>> val2 = SampleEnum(slang="deuce")
>>> int(val2)
2
>>> try:
...   se = SampleEnum("two", spanish="cero")
... except ValueError:
...   print("Value mismatch")
Value mismatch

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

推荐PyPI第三方库


热门话题
由ScheduledExecutorService触发的java同步线程   java如何兼容OpenJRE/JDK1.8。x与OracleJRE/jdk1.8。十、   可重用代码的静态最佳实践Java   TestsNG中有多个测试的java事务问题   排序为什么我的气泡排序不起作用?JAVA   JavaSpring与动态数据源   java如何在Mule Dataweave转换中使用正则表达式替换特殊字符?   java是否单独调用服务器以在jsp文件的img标记中呈现图像?   java基本语法,用于在函数中将扫描程序对象作为参数传递   java基于两列在Hibernate中填充外部集合   java安装eclipse时,我在文件夹中找不到jdk   kotlin Java 11`HttpClient`正在下载但未下载?(负内容长度)   文件Java无法读取Ö(特殊字符)并打印它   javars+Spring   java TestNg Selenide。没有webdriver绑定到当前线程   java我应该如何对数据库建模,以便数据库中的每个学生实体都有一个与每个课程实体相关的分数?   java GoogleAccountCredential getSelectedAccountName()在设置并实现权限后返回null   java从ngclick调用servlet中的函数   java NetBeans JTable不带滚动窗格,保留标题   java Drools从会话中获取相同类型的对象