在 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
这是我认为可能的实现方式。我看到的两个烦人的事情是:
设置value
我必须做:
q = testClass()
q.setValue(q.Color.red)
我发现 q.Color.red
有点令人不快,我宁愿有类似的东西:Color.red
或只是 red
。也许唯一的方法是使用一些字符串比较,但这正是我试图避免使用枚举的方法。
我得到一个额外的方法 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)
我想用一个枚举来表示一个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
这是我认为可能的实现方式。我看到的两个烦人的事情是:
设置
value
我必须做:q = testClass()
q.setValue(q.Color.red)
我发现
q.Color.red
有点令人不快,我宁愿有类似的东西:Color.red
或只是red
。也许唯一的方法是使用一些字符串比较,但这正是我试图避免使用枚举的方法。我得到一个额外的方法
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)