[英]Using an Enum as a flag in a class, Python
我想用一个枚举来代表一个类的内部状态:
#!/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
,看起来像枚举类的内部方法。 这个是来做什么的?
替代方案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)
如果您的Class Color不会与应用程序中的其他任何冲突,则可以将Color类移出testClass。
#!/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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.