私信  •  关注

Natim

Natim 最近创建的主题
Natim 最近回复了
10 年前
回复了 Natim 创建的主题 » python中的枚举[重复]

我更喜欢在Python中定义枚举,如下所示:

class Animal:
  class Dog: pass
  class Cat: pass

x = Animal.Dog

它比使用整数更能防止错误,因为你不必担心确保整数是唯一的(例如,如果你说Dog=1和Cat=1,你就完蛋了)。

它比使用字符串更能防止错误,因为你不必担心拼写错误(例如。 x==“catt”无声地失败,但x==动物。Catt是一个运行时异常)。


增编: 您甚至可以通过让Dog和Cat从具有正确元类的symbol类继承来增强此解决方案:

class SymbolClass(type):
    def __repr__(self): return self.__qualname__
    def __str__(self): return self.__name__

class Symbol(metaclass=SymbolClass): pass


class Animal:
    class Dog(Symbol): pass
    class Cat(Symbol): pass

然后,如果您使用这些值来索引字典,请求它的表示将使它们看起来很好:

>>> mydict = {Animal.Dog: 'Wan Wan', Animal.Cat: 'Nyaa'}
>>> mydict
{Animal.Dog: 'Wan Wan', Animal.Cat: 'Nyaa'}