簡體   English   中英

有沒有更好的方法來表示具有相同值的枚舉?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM