python - 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
?
解决方案
这是一个偏好问题。如果这只是您知道不会扩展的静态检查,则可以像 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
这遵循打开/关闭原则,其中一个模块很容易扩展而无需更改它的代码。
推荐阅读
- javascript - 我可以用 Javascript 创建视频吗?
- java - 如何生成具有特定位范围的 SecureRandom 数
- python - pywin32的安装/卸载问题
- r - 无法对 R 中的数据框列表执行列表函数
- asp.net-mvc - Cookie 中的 ASP.net MVC 文化信息
- r - 如何将日历正确包含到我的数据集中?
- excel - 获取由另一列中的值分区的列中的唯一值,并将其扔到以逗号分隔的另一列
- javascript - 使用 PATH 元素在 SVG 中绘制双曲线
- mql4 - EA 在 MQL4 中打开比预期更多的订单
- julia - 在 Julia 中将 NamedTuple 数组转换为数组