我不确定,这样的事情是否可能,但我想要保存更多的属性,以枚举属性(如值)。
示例:
class Unit(Enum):
mm = "millimeter"Unit.mm.value将返回“毫米”。
现在我想访问一个简短的版本,如果我能实现一些东西,这将是非常棒的,这将导致Unit.mm.upper_case返回“毫米波”。
我知道我可以创建一个额外的函数,它以Unit.mm作为属性,并返回所需的输出,但我确信还有更好的方法。
发布于 2022-07-01 16:52:00
您可以在Enum成员上定义一个附加属性,如下所示:
from enum import Enum
class Unit(Enum):
mm = 'millimeter'
@property
def capitalized(self):
# self is the member here, e.g. Unit.mm
return self.value.capitalize()
print(Unit.mm.capitalized)
>>>Millimeter这是docs 参考文献。
发布于 2022-07-01 17:18:09
如果您可以完全从枚举定义的名称和值部分获得附加信息,则可以使用上面Jacques的属性或方法方法。
enum模块文档中的第二个示例描述了如何覆盖__new__方法将附加信息附加到每个枚举成员,而不会影响使用Unit.mm.value获取定义的能力。
>>> class Coordinate(bytes, Enum):
... """
... Coordinate with binary codes that can be indexed by the int code.
... """
... def __new__(cls, value, label, unit):
... obj = bytes.__new__(cls, [value])
... obj._value_ = value
... obj.label = label
... obj.unit = unit
... return obj
... PX = (0, 'P.X', 'km')
... PY = (1, 'P.Y', 'km')
... VX = (2, 'V.X', 'km/s')
... VY = (3, 'V.Y', 'km/s')
...
>>> print(Coordinate['PY'])
Coordinate.PY
>>> print(Coordinate(3))
Coordinate.VY
>>> print(Coordinate.VY.value)
3
>>> print(Coordinate.VY.unit)
km/shttps://stackoverflow.com/questions/72832034
复制相似问题