Python 枚举属性可以有一个空字符串吗?

Tra*_*VOX 5 python enums sqlalchemy

我真的很想在我正在研究的这个模型中使用 Python 枚举类型。问题是来自数据提供者的潜在值之一是空字符串。

鉴于这个模型...

from sqlalchemy import Column, Enum

class Events(Base):
        __tablename__ = 'events'
        ...
        restriction_code = Column(Enum(RestrictionCode))
        ...
Run Code Online (Sandbox Code Playgroud)

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

from enum import Enum

class RestrictionCode(Enum):
    A = 'A Description'
    B = 'B Description'
    C = 'C Description'
    D = 'D Description'
    '' = 'No Restriction'
Run Code Online (Sandbox Code Playgroud)

上面的结果并不奇怪:SyntaxError: can't assign to literal。这是否可能或者有解决方法吗?

Eth*_*man 4

不,每个 Enum 成员都必须有一个名称。

在这种情况下使用枚举的预期方法是让成员的值是存储在数据库中的值,因此您的枚举应如下所示:

class RestrictionCode(Enum):
    A = 'A'
    B = 'B'
    C = 'C'
    D = 'D'
    NONE = ''
Run Code Online (Sandbox Code Playgroud)

如果您还想要描述,则需要设计自己的枚举 - 但这并不难:

class DescriptiveEnum(Enum):
    #
    def __new__(cls, value, description):
        member = object.__new__(cls)
        member._value_ = value
        member.description = description
        return member
Run Code Online (Sandbox Code Playgroud)

那么你的RestrictionCode意愿将如下所示:

class RestrictionCode(DescriptiveEnum):
    A = 'A', 'A description'
    B = 'B', 'B description'
    C = 'C', 'C description'
    D = 'D', 'D description'
    NONE = '', 'No restriction'
Run Code Online (Sandbox Code Playgroud)