如何解决Python enum.Enum:创建可以分配enum.Enum成员的变量
在Python 3.4+中创建枚举非常简单:
from enum import Enum
class MyEnum(Enum):
A = 10
B = 20
这使我获得了typedef MyEnum。 这样,我可以分配一个变量:
x = MyEnum.A
到目前为止一切顺利。 但是,如果我喜欢使用enum.Enum作为函数或类方法的参数,并且要确保类属性仅包含enum.Enum成员,而不包含其他值,事情就会变得复杂起来。
我该怎么做?我的想法是这样的,我认为它更多是替代方法,而不是解决方案:
class EnContainer:
def __init__(self,val: type(MyEnum.A) = MyEnum.A):
assert isinstance(val,type(MyEnum.A))
self._value = val
您有什么建议或我的方法有任何问题吗?我必须考虑大约10种不同的枚举,并希望采用一致的方法进行初始化,设置和获取。
解决方法
使用type(MyEnum.A)
代替MyEnum
:
def __init__(self,val: MyEnum = MyEnum.A):
assert isinstance(val,MyEnum)
请不要使用assert
进行错误检查,它们是用于程序验证-换句话说,谁在调用EnContainer
?如果只有您自己的代码使用已验证的数据来调用它,那么assert
就可以了;但是如果您无法控制的代码正在调用它,那么您应该使用正确的错误检查:
def __init__(self,val: MyEnum = MyEnum.A):
if not isinstance(val,MyEnum):
raise ValueError(
"EnContainer called with %s.%r (should be a 'MyEnum')"
% (type(val),val)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。