有什么好的理由`StrEnum`(和`Enum`)不提供“pythonic”`__repr__`?

问题描述 投票:0回答:1

Python

Enum
类型的作者是否有充分理由实现返回例如
__repr__
代替
<X.y: z>
(或当
X(y=z)
等于
X(z)
时使用
y
),是Python
推荐的有效Python表达式吗?推荐内容如下:
如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)

我正在按照规定实现一个模型,该规范规定特定值必须是[字符串之一]“foo”或“bar”,我理解它有效地定义了所谓的枚举值或枚举类型的值。我选择使用

z

来实现接受上述两个字符串作为值的类型。该类型是这样创建的:

StrEnum

类型的问题是,例如,
Foobar = StrEnum('Foobar', ('foo', 'bar'))
以我认为不太适合我的需求的格式返回值的文本表示形式:

repr(Foobar('foo'))

我依赖于某些类型的对象(包括
"<Foobar.foo: 'foo'>"
)的表示是“可逆的”,因为在

Foobar

 调用的结果上调用 
eval
 返回的对象相当于传递给 
repr 的对象
.
我知道我可以通过覆盖例如来“纠正”这个问题
repr

但是如果我解决了错误的问题,我宁愿不编写自己的方法。但是,我也不想使用例如

StrEnum.__repr__

或其他,可能更多地涉及Python的序列化设施,因为我没有使用这些设施的经验,我预计我需要花费相当多的时间来评估这些设施将如何应用于我的案例以及它们是否会引入我需要的回归转移到并地址。
	

如果您想找到所有原因(有三四个不同的线程,有数百篇帖子),您必须搜索
python python-3.x enums repr
1个回答
0
投票
,但原因之一是要表明您是处理一个不寻常的 Python 对象。

© www.soinside.com 2019 - 2024. All rights reserved.