python - 具有无限/动态成员的枚举
问题描述
摘要:我想要一个(整数)枚举,其中包含一些(负)成员,这些成员对应于特定状态和未绑定(正)成员。
示例:假设我们有一个数据库条目,其中存储了比赛中的获胜位置。如果比赛结束,这些条目是积极的。但是,也有一些特殊值,例如未完成、未参加、取消资格。这些作为负值存储在数据库中。
现在我想用 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
其他东西——也许是(使用from的namedtuple
示例代码:NamedTuple
aenum
class Status(aenum.IntEnum):
FINISHED = 0
DID_NOT_FINISH = -1
DID_NOT_ATTEND = -2
DISQUALIFIED = -3
class Placement(aenum.NamedTuple):
race = 0, 'name of race'
status = 1, 'finished race?'
placement = 2, 'position when finished'
winner = Placement('2021 Marathon', Status.FINISHED, 1)
推荐阅读
- android - 执行 com.android.build.gradle.internal.tasks 时发生故障
- javascript - 如何使用 socket.io 重新加载表数据
- vue.js - Vuex | 地图状态 - 页面刷新时 beforeMount() 中的范围问题
- java - 如何在 Maven 中引用不在 mvnrepo 上但在 Eclipse Orbit 上托管的 jar?
- ruby-on-rails - 如何将大量数据从网络爬虫保存到数据库
- kaggle - 如何在无需注册的情况下快速从 Kaggle notebook 获取代码?
- php - PUT 不更新实体
- php - 以编程方式发送 Ninja Forms 通知
- mysql - mysqli 查询带有编码的多个案例
- c# - 如何禁用恢复 Visual Studio 安装程序项目的丢失文件?