【发布时间】:2019-06-05 04:45:15
【问题描述】:
我继承了类似这样的代码。
class Clients(IntEnum):
ALICE = 1
BOB = 2
PETER = 3
CHERYL = 4
LARRY = 5
if client_id == 1:
client_info = find_info(Clients.ALICE.value)
elif client_id == 2:
client_info = find_info(Clients.BOB.value)
elif client_id == 3:
client_info = find_info(Clients.PETER.value)
elif client_id == 4:
client_info = find_info(Clients.CHERYL.value)
elif client_id == 5:
client_info = find_info(Clients.LARRY.value)
else:
raise Exception('Unknown client_id.')
对 Python 枚举没有太多经验,我迫切希望将其简化为类似这样的内容(伪代码):
if client_id in dict(Clients).keys():
client_info = find_info(client_id)
else:
raise Exception('Unknown client_id.')
我尝试了Clients.__members__ 和Clients.__dict__,但它们的行为并不像我预期的那样,返回一个叫做mappingproxy 的东西。
我可以'ALICE' in Clients.__members__,但是这些值是否有等价物?如果没有,有没有更优雅的方式来编写这段代码?
【问题讨论】:
-
client_id是否总是与客户的value相同?如果是这样,您根本不需要映射,如enums allow access by value。 -
也许我应该稍微修改一下我的问题。我意识到我可以做到
Clients(client_id).name我想我的问题主要是如何验证价值。