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

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第三方库


热门话题
java制作Minecraft Mod。编译错误   java如何将系统属性文件传递给GWT?   java如何使用Android Studio 0.8.9配置Andengine、Andengine平铺地图、Physics2DBox?   java无法从Ubuntu14安装带有dockerfile的openjdk7jdk。04   java是捕获大多数try-catch语句的一种方法   java在Tomcat上启动Jenkins时出现一个问题(http://localhost:8080/jenkins/)   cmd如何在不单独启动的情况下作为java程序的一部分使用?   如何使Java在同一命令提示符窗口中打开批处理文件   Java:有没有一种方法可以将ArrayList<Boolean>转换为Boolean[](基本数组)?   java如何使用SpringWebClient进行同步调用?   java将上下文传递给多个线程是否安全?   在java中,为什么静态字段(不是final)被限制在内部类中   java关于Play2和Hibernate的几个问题   java如何使用JSch连接在单个会话中运行多个命令并读取其输出?   在Java中通过socket连接发送2D字符串数组   尽管服务已经启动,但不允许java远程访问namenode。