在python中将枚举与非整数类型一起使用是一种不好的做法吗?
假设我有一个扩展了在python中将枚举与非整数类型一起使用是一种不好的做法吗?,python,python-3.x,enums,Python,Python 3.x,Enums,假设我有一个扩展了Enum的类,名为foo;但是,我没有为每个项目使用整数,而是使用字符串 from enum import Enum class foo (Enum): foo = "Hello" bar = ", " foobar = "world" barfoo = "!" 编译时,系统不会抛出任何错误,并愉快地将该类视为普通枚举。根据为什么会有人希望这样做,如果您希望将每个名称链接到数据结构(如dict),这是非常有用的。举个例子: from enum
Enum
的类,名为foo;但是,我没有为每个项目使用整数,而是使用字符串
from enum import Enum
class foo (Enum):
foo = "Hello"
bar = ", "
foobar = "world"
barfoo = "!"
编译时,系统不会抛出任何错误,并愉快地将该类视为普通枚举。根据为什么会有人希望这样做,如果您希望将每个名称链接到数据结构(如dict),这是非常有用的。举个例子:
from enum import Enum
class foo (Enum):
foo = {"text" : "Hello", "meaning" : "hello"}
bar = {"text" : ", ", "meaning" : "comma"}
foobar = {"text" : "world", "meaning" : "world"}
barfoo = {"text" : "!", "meaning" : "exclamation"}
那么,梅兹,为什么不使用普通类呢?
嗯,能够将此信息存储为枚举非常有用,以便快速比较类型。例如,x={“name”:“foo”,“type”:foo.foo}
如果x[type]是foo.foo,则可以使用轻松检查类型
这是一种“坏习惯”吗?我的意思是:
这是Enum
的预期用途吗
如果我从类foo(Enum):
中取出(Enum)
,比较时会有效率差异吗
有没有更好的方法来做我想做的事
- 在python中将枚举与非整数类型一起使用是一种不好的做法吗?
不,这不是坏习惯
- 这是Enum的预期用途吗
是的,Enum
设计用于处理非整数类型
- 如果我从类foo(Enum)中取出(Enum):,比较时会有效率差异吗?
非Enum
版本可能会更快,但这可能无关紧要。(在猜测需要优化的内容之前,先测试瓶颈。)
- 有没有更好的方法来做我想做的事?
使用可变类型是允许的——这意味着我没有采取任何措施禁止它1——但这通常不是一个好主意<代码>枚举
成员应为常量。您的示例似乎希望在每个成员上有两个额外属性:text
和means
——这在stdlib版本的Enum
和Enum
版本上都是可能的:
from aenum import AutoNumberEnum
class Foo(AutoNumberEnum):
_init_ = 'text meaning'
foo = "Hello", "hello"
bar = ", ", "comma"
foobar = "world", "world"
barfoo = "!", "exclamation"
在使用中:
>>> Foo.bar
<Foo.bar: 2>
>>> Foo.bar.text
', '
>>> Foo.bar.meaning
'comma'
>>Foo.bar
>>>Foo.bar.text
', '
>>>Foo.bar.意思
“逗号”
有关实现此目的的stdlib方法,请参阅
1披露:我是、和库的作者。我会小心变异值。这个家伙
enums
Woah,autonumbernum
正是我想要的。谢谢