首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum属性的属性?

Enum属性的属性?
EN

Stack Overflow用户
提问于 2022-07-01 16:11:52
回答 2查看 50关注 0票数 2

我不确定,这样的事情是否可能,但我想要保存更多的属性,以枚举属性(如值)。

示例:

代码语言:javascript
复制
class Unit(Enum):
    mm = "millimeter"

Unit.mm.value将返回“毫米”。

现在我想访问一个简短的版本,如果我能实现一些东西,这将是非常棒的,这将导致Unit.mm.upper_case返回“毫米波”。

我知道我可以创建一个额外的函数,它以Unit.mm作为属性,并返回所需的输出,但我确信还有更好的方法。

EN

回答 2

Stack Overflow用户

发布于 2022-07-01 16:52:00

您可以在Enum成员上定义一个附加属性,如下所示:

代码语言:javascript
复制
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 参考文献

票数 2
EN

Stack Overflow用户

发布于 2022-07-01 17:18:09

如果您可以完全从枚举定义的名称和值部分获得附加信息,则可以使用上面Jacques的属性或方法方法。

enum模块文档中的第二个示例描述了如何覆盖__new__方法将附加信息附加到每个枚举成员,而不会影响使用Unit.mm.value获取定义的能力。

代码语言:javascript
复制
>>> 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/s
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72832034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档