繁体   English   中英

在Python类中使用枚举作为标志

[英]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

我认为这可能是一种可能的实现。 我看到的两个烦人的事情是:

  1. 设置value我必须做:

    q = testClass()

    q.setValue(q.Color.red)

    而且我发现q.Color.red令人讨厌,我宁愿有这样的东西: Color.redred 也许唯一的方法就是使用一些字符串比较,但这正是我要避免使用枚举的方法。

  2. 我得到了一个额外的方法,即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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM