使用Enum作为类中的标志,Python

时间:2015-04-01 13:32:05

标签: python class oop python-3.4

我想使用枚举来表示类的内部状态:

#!/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.redred的东西。也许唯一的方法是使用一些字符串比较,但这正是我试图避免使用枚举。

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

2 个答案:

答案 0 :(得分:3)

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

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

用法:

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

参考:


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

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)

答案 1 :(得分:1)

如果您的班级颜色不会与您的应用程序中的任何其他内容冲突,您可以将Color类移出测试类。

#!/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)