Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将枚举与非整数类型一起使用是一种不好的做法吗?_Python_Python 3.x_Enums - Fatal编程技术网

在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
    正是我想要的。谢谢