【发布时间】:2021-04-17 16:49:56
【问题描述】:
摘要:我想要一个(整数)枚举,其中包含一些(负)成员,这些成员对应于特定状态和未绑定(正)成员。
示例:假设我们有一个数据库条目,其中存储了比赛中的获胜位置。如果比赛结束,这些条目是积极的。但是,也有一些特殊值,例如没有完成,没有参加,失格。这些以负值的形式存储在数据库中。
现在我想用 Python 来表示这个结构。由于枚举是不可变的,因此这变得相当困难。我已经研究了enum.EnumMeta 并查看了aenum 库,但没有找到解决方案。我最不荒谬的想法是有一个像下面这样的枚举:
import enum
class RankingPlace(enum.IntEnum):
FINISHED = 0
DID_NOT_FINISH = -1
DID_NOT_ATTEND = -2
DISQUALIFIED = -3
def __call__(self, value):
if value < 0:
return super()(member)
else:
member = self.__class__.FINISHED
member.actual_place = value
return member
这有点工作,但我必须打电话给一个成员才能让它工作。有没有更清洁的方法使用例如自定义元类?
【问题讨论】:
-
如果枚举不限于这些特定值,它似乎是错误的。只需为特殊值声明变量。
-
请注意
enum的意义在于创建enumerated types——这意味着具有可枚举(固定数量)值的类型。允许任意数量的成员违背了目的。