首页 > 解决方案 > What is the best way to allow string to be one of two constant values?

问题描述

Let's say, I have the following code:

class SomeChoices(object):
    CHOICE_A = "Sub"
    CHOICE_B = "First Team"

    @classmethod
    def choices(cls):
        return cls.CHOICE_A, cls.CHOICE_B

The comparing string for CHOICE_B can be both First Team or First-Team. What is the best practice to compare them so that both First Team and First-Team would be considered as CHOICE_B?

标签: pythonpython-2.7

解决方案


这是一个偏好问题。如果这只是您知道不会扩展的静态检查,则可以像 bwdm 的答案那样快速实现一些东西。

如果您想使其可扩展,以便您可以动态添加更多要比较的单词,您最好保留多个集合,每个集合都包含可行的单词。

class SomeChoices(object):
    choices = {
        "A":{"Sub"}, "B":{"First Team", "First-Team"}
    }

现在,您可以轻松地检查某些内容是否是选择的一部分,如果需要,还可以扩展它。

"First-Team" in SomeChoices.choices["B"]    # True
"First Team" in SomeChoices.choices["B"]    # True
"First_Team" in SomeChoices.choices["B"]    # False

SomeChoices.choices["B"].add("First_Team")
"First_Team" in SomeChoices.choices["B"]    # True

SomeChoises.choices["C"] = {"Second Team"}
"Second Team" in SomeChoices.choices["C"]   # True

这遵循打开/关闭原则,其中一个模块很容易扩展而无需更改它的代码。


推荐阅读