Python枚举属性可以为空字符串吗?

5
我很想在我正在处理的模型中使用Python枚举类型,但问题是数据提供者可能会提供一个空字符串作为其中一个潜在值。
考虑到这个模型...
from sqlalchemy import Column, Enum

class Events(Base):
        __tablename__ = 'events'
        ...
        restriction_code = Column(Enum(RestrictionCode))
        ...

其中一个枚举类型将具有像这样的“空字符串”属性...

from enum import Enum

class RestrictionCode(Enum):
    A = 'A Description'
    B = 'B Description'
    C = 'C Description'
    D = 'D Description'
    '' = 'No Restriction'

上述代码会产生一个不出所料的错误:SyntaxError: can't assign to literal。这是可能的吗?还是有其他解决方法?
1个回答

4
不,每个枚举成员都必须有一个名称。
在这种情况下使用枚举的预期方式应该是将成员的值作为存储在数据库中的值,因此您的枚举应该如下所示:
class RestrictionCode(Enum):
    A = 'A'
    B = 'B'
    C = 'C'
    D = 'D'
    NONE = ''

如果你想要一个描述,你需要设计自己的枚举类型——但这并不难:
class DescriptiveEnum(Enum):
    #
    def __new__(cls, value, description):
        member = object.__new__(cls)
        member._value_ = value
        member.description = description
        return member

那么你的RestrictionCode将会是这样的:
class RestrictionCode(DescriptiveEnum):
    A = 'A', 'A description'
    B = 'B', 'B description'
    C = 'C', 'C description'
    D = 'D', 'D description'
    NONE = '', 'No restriction'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接