我想使用枚举来表示类的内部状态:
#!/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
这是我认为可能的实现。我看到的两件烦人的事情是:
设置value
我必须这样做:
q = testClass()
q.setValue(q.Color.red)
我觉得q.Color.red
有点不合适,我宁愿有类似:Color.red
或red
的东西。也许唯一的方法是使用一些字符串比较,但这正是我试图避免使用枚举。
我得到一个额外的q.Color.mro
方法,它似乎是枚举类的内部方法。这个是来做什么的?
答案 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)