[英]Is there a better way to represent enum with same values?
class FuzzyTime(Enum):
morning = 1
dawn = 2
noon = 3
midday = 4
afternoon = 5
evening = 6
sunset = 7
dusk = 8
night = 9
在這些情況下,我想將早晨和黎明、中午和中午、晚上、日落、黃昏和夜晚表示為同義詞。 所以理想情況下,我想要類似的東西:
class FuzzyTime(Enum):
morning, dawn = 1
noon, midday = 2
afternoon = 3
evening, sunset, dusk, night = 6
當我使用它時,我想做類似的事情:
if MORNING == FuzzyTime.morning:
pause
這可以匹配“早上”和“黎明”。 那可能嗎?
編輯:當我使用它時,我想比較一個字符串是否與其中一個值匹配。 假設我的字符串是:
s = 'morning'
if s == FuzzyTime.morning or s == FuzzyTime.dawn:
return get_morning_time(reference_time)
我只想知道是否有辦法避免編寫'if s == or s ==' 語句。 如果可能的話,我想擺脫 if 語句中的“或”,但達到相同的效果。
我不明白你為什么要為此使用枚舉值。 您已經在字符串和枚舉 label 之間進行轉換時遇到了麻煩。 只需定義您的術語集:
class FuzzyTime():
MORNING = {"morning", "dawn"}
MIDDAY = {"noon", "midday"}
AFTERNOON = {"afternoon"}
NIGHT ={"evening", "sunset", "dusk", "night"}
從這里,只需使用“自然” in
for s in ["dawn", "noon", "dusk"]:
if s in FuzzyTime.MORNING:
print("I need caffeine.")
elif s in FuzzyTime.MIDDAY:
print("I'm ready to solve the world's problems!")
... ETC。
Output:
I need caffeine.
I'm ready to solve the world's problems!
這是否讓您使用起來足夠容易?
你的意思是這樣的?
class FuzzyTime(Enum):
morning = dawn = 1
noon = midday = 2
afternoon = 3
evening = sunset = dusk = night = 6
更新:
in
運算符中使用:
class FuzzyTime:
morning = 'morning'
dawn = 'dawn'
noon = 'noon'
midday = 'midday'
afternoon = 'afternoon'
evening = 'evening'
sunset = 'sunset'
dusk = 'dusk'
night = 'night'
m_d = [morning, dawn]
n_m = [noon, midday]
e_s_d_n = [evening, sunset, dusk, night]
s = 'morning'
if s in FuzzyTime.m_d:
return get_morning_time(reference_time)
您的要求有點奇怪,但是,字典怎么樣,例如
obj = {
'morning': 1,
'dawn': 1,
'noon': 2,
'midday': 2,
'afternoon': 3,
'evening': 6,
'sunset': 6,
'dusk': 6,
'night': 6
}
然后,您可以使用輸入字符串“早上”,例如
str = 'dawn'
is_morning = obj[str] == obj['morning']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.