当前位置: 首页 > 面试题库 >

具有属性的python枚举

羊昊苍
2023-03-14
问题内容

考虑:

class Item:
   def __init__(self, a, b):
       self.a = a
       self.b = b

class Items:
    GREEN = Item('a', 'b')
    BLUE = Item('c', 'd')

有没有办法使这种简单枚举的思想适应这种情况?(请参阅此问题)理想情况下,就像在Java中一样,我想将它们全部塞入一个类中。

Java模型:

enum EnumWithAttrs {
    GREEN("a", "b"),
    BLUE("c", "d");

    EnumWithAttrs(String a, String b) {
      this.a = a;
      this.b = b;
    }

    private String a;
    private String b;

    /* accessors and other java noise */
}

问题答案:

Python
3.4具有新的Enum数据类型(已反向移植为,enum34并增强为aenum1)。无论enum34aenum2轻松支持您的使用情况:

[ aenumpy2 / 3]

import aenum
class EnumWithAttrs(aenum.AutoNumberEnum):
    _init_ = 'a b'
    GREEN = 'a', 'b'
    BLUE = 'c', 'd'

[ enum34py2 / 3或stdlib enum3.4+]

import enum
class EnumWithAttrs(enum.Enum):

    def __new__(cls, *args, **kwds):
        value = len(cls.__members__) + 1
        obj = object.__new__(cls)
        obj._value_ = value
        return obj

    def __init__(self, a, b):
        self.a = a
        self.b = b

    GREEN = 'a', 'b'
    BLUE = 'c', 'd'

并在使用中:

--> EnumWithAttrs.BLUE
<EnumWithAttrs.BLUE: 1>

--> EnumWithAttrs.BLUE.a
'c'

1披露:我是Python
stdlibEnum
enum34backport和Advanced
Enumeration(aenum
库的作者。

2 aenum还支持NamedConstants和基于元类NamedTuples



 类似资料:
  • 我想创建一个带有 Java 枚举(enum)的 UML 图,它具有一个或多个属性,但我对如何做到这一点感到困惑。 例如,一个枚举可以像这样声明: 没有属性,很容易: 但是如何优雅地用属性建模呢?应该是这样吗? 我在这里只找到了这个示例,但它使用String类属性作为枚举名称。我认为,这应该不同于的用法,而不指定枚举名称数据类型。

  • 问题内容: 我是Swift的新手,只是在文档中遇到了这一点: 计算的属性由类,结构和枚举提供。存储的属性仅由类和结构提供。 这是为什么?枚举的关联值是否像存储属性一样工作?似乎他们最初存储了属性- 问题答案: 确实具有存储的 类型 属性-即属性。他们没有存储的 实例 属性。我不知道是否存在技术上的原因为什么存储的实例属性不可用于。如果您想要“为什么”的技术答案,则可能需要在开发论坛上提问。 在您的

  • 我想知道是否有什么方法可以使属性值动态。类似于这样: 感谢您的反馈。在我的例子中,属性值是系统特定的,应该在测试运行时生成。

  • 我已经在stackoverflow和网络上寻找解决方案。我没有见过有效的解决方案,因为可能没有一个帖子完全符合我的用例,它包含文件中的列表和对象结构。 这里有一个例子作为yaml 这是与属性文件相同的示例 我希望能够向我的应用程序提供 teddy.yml 或 teddy.properties 文件以进行配置。 这是我的课程: 我已经尝试了这种设置,使用环境来尝试访问属性,删除前缀,声明一个“Pro

  • 这就是所谓的扩展枚举。我知道它管用--我以前试过并用过很多次。我知道如果这是您应该对枚举做的事情,可能会有讨论--我认为是的,因为您仍然有您定义的常量,但它们只是包含了一些更多的信息(仍然是常量)。(另外:我看过这个例子,java枚举上的自定义字段没有序列化,我认为它们也遵循了我在如何生成枚举上的自定义属性方面的思路)。 现在,我究竟应该如何从Eclipse EMF模型生成这样的东西呢?我甚至不知