Python:aenum枚举生成错误

时间:2017-03-24 12:36:23

标签: python enums

今天我尝试了一个带有aenum的枚举(就像在这个答案:https://stackoverflow.com/a/1695250/4720441中):

orientation = Enum('red', 'yellow', 'green', 'orange')

但是这在aenum库中产生了一个错误:

  

文件" C:\ Python \ 27 \ lib \ site-packages \ aenum__init __。py",第1417行,   在_get_mixins_中       issubclass(base,Enum)和TypeError:issubclass()arg 1必须是一个类

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

使用调用语法创建枚举的各种方法是:

SELECT table_name FROM sys.tables WHERE table_name LIKE 'Mytable_%'

stdlib versionenum34aenum 1 的情况相同。 enum 2 包是一个旧式库。

stdlib版本包含

3.4

  • 枚举
  • IntEnum
  • 独特

3.6

  • 标志
  • INTFLAG

* # starts at 1 SomeEnum = Enum('SomeEnum', 'member1 member2 member3') # starts at 1 SomeEnum = Enum('SomeEnum', ['member1', 'member2', 'member3']) # values manually assigned SomeEnum = Enum('SomeEnum', [('member1', 3), ('member2', 4), ('member3', 5)]) # values manually assigned SomeEnum = Enum('SomeEnum', {'member1': 6, 'member2': 7, 'member3': 8}) # starts at 9 SomeEnum = Enum('SomeEnum', 'member1 member2 member3', start=9) 与3.4 stdlib相同。

enum34

包含以上内容,加上

  • OrderedEnum - 成员可以相互比较
  • AutoNumberEnum - 自动生成值
  • MultiValueEnum - 可以使用多个值查找成员
  • NoAliasEnum - 重复项是唯一的,而不是别名

以及操纵枚举构造的各种帮助:

  • skip - 防止属性成为枚举成员(属性保持不变)
  • 常量 - 防止属性成为枚举成员(属性成为一种只读属性)
  • extend_enum - 向现有枚举添加新成员(在分阶段构建枚举时很有用)

以及其他相关类型

  • NamedConstant - 没有枚举功能,只是名称为
  • 的值
  • NamedTuple - 类似于stdlib aenum,但使用元类而不是namedtuple构建

1 披露:我是Python stdlib Enumenum34 backportAdvanced Enumeration (aenum)库的主要作者。

2 较早的eval库的作者也帮助了stdlib版本。

答案 1 :(得分:1)

aenum.Enum不是这样构建的(请参阅https://bitbucket.org/stoneleaf/aenum)。

相反,您应该传入包含Enum名称的第一个参数,并且第二个参数对应于您想要枚举的空格分隔的枚举键列表。

E.g。

orientation = Enum('red', 'yellow green orange')

请注意https://stackoverflow.com/a/1695250/4720441

上的答案

在这个答案中,海报创建了一个enum函数,它将它的参数组合成dict,然后将该dict传递给标准的Enum构造函数(作为第三个参数) 。