簡體   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