在 class、Python 中使用枚举作为标志

Using an Enum as a flag in a class, Python

我想用一个枚举来表示一个class的内部状态:

#!/usr/bin/python3
from enum import Enum


class testClass:
    class Color(Enum):
        red = 1
        blue = 2
        green = 3

    def __init__(self):
        self.value = 0

    def setValue(self, Color):
        self.value = Color

这是我认为可能的实现方式。我看到的两个烦人的事情是:

  1. 设置value我必须做:

    q = testClass()

    q.setValue(q.Color.red)

    我发现 q.Color.red 有点令人不快,我宁愿有类似的东西:Color.red 或只是 red。也许唯一的方法是使用一些字符串比较,但这正是我试图避免使用枚举的方法。

  2. 我得到一个额外的方法 q.Color.mro,它看起来像是枚举 class 的内部方法。这个是来做什么的?

如果您的 Class 颜色不会与应用程序中的任何其他内容发生冲突,您可以将颜色 class 移出测试Class.

#!/usr/bin/python3
from enum import Enum

class Color(Enum):
    red = 1 
    blue = 2 
    green = 3 


class testClass:
    def __init__(self):
        self.value = 0 

    def setValue(self, Color):
        self.value = Color

那你就可以使用

q = testClass()
q.setValue(Color.b)

备选方案 #1:您可以让 Enum class 为您查找字符串:

    def setValue(self, color):
        self.value = self.Color[color]

用法:

q = testClass()
q.setValue('red')

参考:


备选方案 #2:如果没有冲突,您可以将 Enum 的成员提升到父级 class:

class testClass:
    class Color(Enum):
        red = 1
        blue = 2
        green = 3
    red = Color.red
    blue = Color.blue
    green = Color.green

    def setValue(self, color):
        self.value = color

用法:

q = testClass()
q.setValue(q.red)