Python enum.Enum:创建我可以分配 enum.Enum 成员的变量
Python enum.Enum: Create variables which i can assign enum.Enum members
在 Python 3.4+ 中创建枚举非常简单:
from enum import Enum
class MyEnum(Enum):
A = 10
B = 20
这给我一个 typedef MyEnum。
有了这个我可以分配一个变量:
x = MyEnum.A
到目前为止一切顺利。
然而,如果我喜欢使用 enum.Enum 作为函数或 class 方法的参数,并且想确保 class 属性只包含 enum.Enum 成员而不是其他值。
我该怎么做?我的想法是这样的,我认为这是一种解决方法而不是解决方案:
class EnContainer:
def __init__(self, val: type(MyEnum.A) = MyEnum.A):
assert isinstance(val, type(MyEnum.A))
self._value = val
你有什么建议或者你认为我的方法有什么问题吗?我必须考虑大约 10 种不同的枚举,并希望采用一致的初始化方法、setter 和 getter。
而不是 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)
)
在 Python 3.4+ 中创建枚举非常简单:
from enum import Enum
class MyEnum(Enum):
A = 10
B = 20
这给我一个 typedef MyEnum。 有了这个我可以分配一个变量:
x = MyEnum.A
到目前为止一切顺利。 然而,如果我喜欢使用 enum.Enum 作为函数或 class 方法的参数,并且想确保 class 属性只包含 enum.Enum 成员而不是其他值。
我该怎么做?我的想法是这样的,我认为这是一种解决方法而不是解决方案:
class EnContainer:
def __init__(self, val: type(MyEnum.A) = MyEnum.A):
assert isinstance(val, type(MyEnum.A))
self._value = val
你有什么建议或者你认为我的方法有什么问题吗?我必须考虑大约 10 种不同的枚举,并希望采用一致的初始化方法、setter 和 getter。
而不是 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)
)