首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python enum.Enum:创建变量,我可以为enum.Enum成员分配这些变量

Python enum.Enum:创建变量,我可以为enum.Enum成员分配这些变量
EN

Stack Overflow用户
提问于 2020-09-17 12:48:23
回答 1查看 454关注 0票数 1

在Python 3.4+中创建枚举非常容易:

代码语言:javascript
复制
from enum import Enum

class MyEnum(Enum):
    A = 10
    B = 20

这给我提供了一个typedef。有了这个,我可以赋值一个变量:

代码语言:javascript
复制
x = MyEnum.A

到目前一切尚好。但是,如果我喜欢使用enum.Enum作为函数或类方法的参数,并且希望确保类属性只保存enum.Enum成员,而不保存其他值,情况就会变得更加复杂。

我该怎么做?我的想法是这样的,我更多地认为这是一种解决办法,而不是解决办法:

代码语言:javascript
复制
class EnContainer:
    def __init__(self, val: type(MyEnum.A) = MyEnum.A):
        assert isinstance(val, type(MyEnum.A))
        self._value = val

你有什么建议吗?你觉得我的方法有什么问题吗?我必须考虑大约10个不同的枚举,并希望对初始化、setter和getter采用一致的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-17 14:03:38

而不是type(MyEnum.A),只需使用MyEnum

代码语言:javascript
复制
def __init__(self, val: MyEnum = MyEnum.A):
    assert isinstance(val, MyEnum)

永远不要使用assert进行错误检查,它们是用于程序验证--换句话说,是谁在调用EnContainer?如果只有您自己的代码正在使用已经验证的数据调用它,那么assert就可以了;但是如果您无法控制的代码正在调用它,那么您应该使用正确的错误检查:

代码语言:javascript
复制
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)
                )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63938380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档