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