如何解决如何在枚举声明中获取值的名称?
在Python3.7.7中,我想在声明相同Enum的另一个值时使用Enum值的名称。
我的第一次尝试:
from enum import Enum
class test(Enum):
value1 = "a"
value2 = value1.name + "b"
这将返回一个AttributeError: 'str' object has no attribute 'name'
。我尝试改用self.value1
和test.value1
并都返回NameError
。
我可以只使用value2 = "value1b"
,但是我担心如果我更改value1
的名称并忘记一些地方而不是由于未定义而导致的立即错误,将会给我带来奇怪的错误。变量。
解决方法
在创建Enum类的过程中,值只是值-在类定义结束之前,它们不会转换为Enum成员。
在类定义机制中,目前没有任何东西可以支持您的用例;但是,您可以使用函数语法生成您的Enum:
# some code to calculate your names and values (not shown)
# that results in
members = (('value1','a'),('value2','value1a'))
test = Enum('test',members)
这将导致:
>>> list(test)
[<test.value1: 'a'>,<test.value2: 'value1a'>]
,
您试图实现的目标并不简单,因为您只能直接从变量引用值,而不能直接引用变量。
我认为最简单的解决方案是使用 Python3.8 + 和debugging feature of f-strings (强调我的意思):
要在评估后同时显示表达式文本及其值(在调试中很有用),可以在表达式后添加等号'='。
因此代码将变成:
from enum import Enum
class test(Enum):
value1 = "a"
value2 = f"{value1=}".split("=")[0] + "b"
可以找到here,也可以使用Python3.7-的其他解决方案。但是它们的实现更加复杂。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。