【问题标题】:Custom enum type in Python 3 [duplicate]Python 3中的自定义枚举类型[重复]
【发布时间】:2017-10-17 10:11:18
【问题描述】:

我确定这是重复的,但我目前无法找到它。

在这个例子中,为什么没有定义self

class State(Enum):
    MY_STATE = type(self)('foo', 'bar')

    def __init__(self, some, thing):
        self.some = some
        self.thing = thing

type(self) 替换为State 也会返回NameError,但对于State

【问题讨论】:

  • self 指的是实例。为什么要在class body中定义呢?它仅在方法内部可用,并且仅当您将第一个参数命名为 self 时才可用。
  • 你到底想要代码做什么?
  • @MenglongLi 为Enum的成员添加参数
  • 为什么需要给枚举成员加参数?你到底想做什么?
  • 投票结束,因为答案意味着我无法删除。我陷入了一个只需要后退一步的 XY 问题。谢谢大家的时间!

标签: python python-3.x enums python-3.6


【解决方案1】:

self 未定义,因为您在类变量中引用它,而不是在实例变量中。它类似于在另一种语言的static 方法中使用thisState 也一样,在你引用它的时候,这个类还没有定义,名字也不存在。

【讨论】:

  • “在类变量中引用它”是什么意思?你能详细说明一下吗?
  • 这是否会导致无法拥有State 类型的实例变量?
  • 这无论如何都会进入无限递归,因为实例变量本身会创建一个实例变量,这将创建一个实例变量....
  • 您将如何实现Java's Enums 之类的目标?
  • 您可以在__init__ 中创建一个实例变量。 self 存在于其中(它自动作为参数传递)。但要小心无限递归。
【解决方案2】:

为什么不像这样提取另一个类:

from enum import Enum


class MyClass:
    def __init__(self, some, thing):
        self.some = some
        self.thing = thing


class State(Enum):
    MY_STATE = MyClass('foo', 'bar')


print(State.MY_STATE == State.MY_STATE)

【讨论】:

  • 这会被认为比尝试将其打包到单个类中更 Python 吗?
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多