Python 3.x 在实现类时与使用Python枚举混淆
这是我第一次使用Enum,如果您能对下面的代码提供帮助,我将不胜感激。根据我的理解,当您使用一组值/名称定义枚举类时,该特定枚举类型的任何字段/变量都不能具有不在枚举类中的值/名称 假设我必须创建一个过敏类,它有一个“严重性”字段,可以有“低、中、高”的值,我必须使用enum来表示它。我认为,如果在创建对象时输入的“严重性”值不是低、中或高,则程序将引发错误。这是正确的还是应该在设置/初始化“严重性”之前显式检查输入是否存在于enum类中?如果我们必须显式检查,那么使用Enum的目的是什么Python 3.x 在实现类时与使用Python枚举混淆,python-3.x,enums,Python 3.x,Enums,这是我第一次使用Enum,如果您能对下面的代码提供帮助,我将不胜感激。根据我的理解,当您使用一组值/名称定义枚举类时,该特定枚举类型的任何字段/变量都不能具有不在枚举类中的值/名称 假设我必须创建一个过敏类,它有一个“严重性”字段,可以有“低、中、高”的值,我必须使用enum来表示它。我认为,如果在创建对象时输入的“严重性”值不是低、中或高,则程序将引发错误。这是正确的还是应该在设置/初始化“严重性”之前显式检查输入是否存在于enum类中?如果我们必须显式检查,那么使用Enum的目的是什么 f
from enum import Enum,auto
class Severity(Enum):
LOW = auto()
MEDIUM = auto()
HIGH = auto()
class Allergy:
def __init__(self, name, symptoms, reporter, severity:Severity):
self.__name = name
self.__reporter = reporter
self.__symptoms = symptoms
self.__severity = severity
def get_severity(self):
return self.__severity
def set_severity(self, severity:Severity):
self.__severity = severity
allergy = Allergy("Dust Allergy","sneezes","Doctor", "5")
print("How severe is the allergy? ",allergy.get_severity())
我希望代码会引发错误或不会运行,因为“5”不在Enum类中。但这是输出
How severe is the allergy? 5
我不确定我是否遗漏了一些非常基本的东西,但网上的例子似乎都不能消除我的疑虑。
到目前为止,我看到的所有示例都显示了基本语法/如何直接访问Enum类中的名称,而不是如何在其他类中使用它
谢谢 有几件事,正如blhsing在他的评论中提到的,在python中不会自动强制使用类型提示。其次,如果您从未使用在代码中创建的严重性枚举来检查有效性,则可以将初始化更改为-
class Allergy:
def __init__(self, name, symptoms, reporter, severity:Severity):
self.__name = name
self.__reporter = reporter
self.__symptoms = symptoms
self.__severity = Severity[severity]
现在,它尝试使用提供的名称保存枚举的相应严重性。在枚举中不存在名称的情况下,它将抛出一个NameError,正如您先前所期望的那样
*注意,您需要以类似的方式更改set_severity函数,并且Python中不强制执行类型提示。要强制执行类型提示,您可以使用运行脚本,或使用类型提示强制执行器模块,例如。关闭
.name
部分,并按原样保存Enum
成员。您仍然可以得到保护,确保它是一个Enum
,具有Severity[Severity]
部分,并且还保留了Enum
的优点。