2015-04-01 60 views
0

我想用一个枚举代表一个类的内部状态:使用一个枚举作为一类的标志,巨蟒

#!/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好歹umpleasant,我宁愿有这样的:Color.red或只是red。也许唯一的办法是使用一些字符串比较,但这正是我试图避免使用枚举。

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

回答

1

替代#1:你可以有Enum类做字符串查找你:

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

用法:

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

参考:


替代#2:如果没有冲突,您能促进枚举的成员父类:

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) 
0

如果您的类颜色不会与应用程序中的任何其他颜色冲突,则可以将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) 
+0

谢谢为你的答案。是的,只是类testClass是在主文件的另一个文件中定义的。我用'testClassfile import testClass'输入testClass。如果我按照你的建议,我将不得不添加'从testClassfile导入颜色'。 我知道,也许我太挑剔,但我试图找到一个“优雅”的方式... – BiA 2015-04-01 13:59:34

+0

那么,如果你想导入是作为testClass的一部分,你将不得不坚持引用它作为testClass.Color 编辑:对于额外的样式点,您可以通过以下方式将两个类(如果单独)导入: from testClassfile import testClass,Color – 2015-04-01 14:09:11