【发布时间】:2021-05-24 03:17:32
【问题描述】:
我正在使用 Python 的 Enum 类(在 Python 3.9 中),并尝试结合他们的 documentation 中的一些东西。 "Planet" example class 演示了一个元组 (mass,radius) 作为枚举成员的值,并在将值传递给重写的 __init__() 方法时基于该值设置其他成员属性。然而,枚举成员的“价值”最终就是那个元组。
AutoName class 显示使用 enum.auto() 辅助函数和重写的 _generate_next_value_() 方法来使用成员的名称作为值。
通常,重写__new__() 方法似乎是设置成员值属性的唯一方法。我很难将这三件事结合起来。
我想要的是类似于 Planet 的东西,除了“值”更改为“名称”,如 AutoName() 中那样,因此 Planet.MERCURY 是“MERCURY”,而不是元组。但是在覆盖__new__() 时,似乎无法知道正在创建的成员的“名称”是什么,因此您无法为其设置“值”。而使用“auto()”,似乎没有办法提供额外的值,比如来自 Planet 的(质量、半径)信息。我希望做这样的事情(假设存在 AutoName 类):
class Planet(AutoName):
MERCURY = auto(3.303e+23, 2.4397e6) # doesn't work
VENUS = (auto(), 4.869e+24, 6.0518e6) # doesn't work
有没有办法将枚举值的元组与改变成员值的某种方式结合起来,就像 auto() 所做的那样?
【问题讨论】: