python - 在 Python 中引用另一个枚举作为枚举值?

标签 python python-3.x object enums

<分区>

假设我有一个 Python Enum枚举的每个实例都应该引用同一枚举的另一个实例。我该怎么做?

当我尝试这样的事情时:

    class Direction(Enum):
        NORTH = (1,0, Direction.EAST, Direction.WEST)
        SOUTH = (-1,0, Direction.WEST, Direction.EAST)
        EAST = (0,1, Direction.SOUTH, Direction.NORTH)
        WEST = (0, -1, Direction.NORTH, Direction.SOUTH)
        
        def __init__(self, y, x, r, l):
            self.y = y
            self.x = x
            self.r = r
            self.l = l

我收到一个看起来有点像这样的错误:

Traceback (most recent call last):
  File "lol.py", line 2, in <module>
    class Direction(Enum):
  File "lol.py", line 3, in Direction
    NORTH = (1,0, Direction.EAST, Direction.WEST)
NameError: name 'Direction' is not defined

在上面的示例中,当我将“Direction”替换为“self”时,我遇到了同样的问题。

有办法吗?

最佳答案

如果您不介意稍微重新排序您的枚举,这很容易:

class Directions(Enum):
    #
    NORTH = 1, 0
    EAST = 0, 1
    SOUTH = -1, 0
    WEST = 0, -1
    #
    def __init__(self, x, y):
        self.x = x
        self.y = y
        if len(self.__class__):
            # make links
            all = list(self.__class__)
            left, right = all[0], all[-1]
            self.left = left
            self.right = right
            left.right = self
            right.left = self

并在使用中:

>>> Directions.NORTH
<Directions.NORTH: (1, 0)>

>>> Directions.NORTH.left
<Directions.EAST: (0, 1)>

>>> Directions.NORTH.right
<Directions.WEST: (0, -1)>

>>> Directions.WEST.left
<Directions.NORTH: (1, 0)>

>>> Directions.WEST.right
<Directions.SOUTH: (-1, 0)>

披露:我是 Python stdlib Enum 的作者, enum34 backport , 和 Advanced Enumeration (aenum)图书馆。

关于python - 在 Python 中引用另一个枚举作为枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63949897/

相关文章:

python - np.loadtxt 忽略 header ,如何保存 header 数据?

python-3.x - 如何用keras测试深度学习模型?

python - 如果我将脚本命名为 'string.py' 或 'math.py',“导入”操作的行为会有所不同。为什么会这样?

java - 访问器方法中对象的副本

java - 我正在尝试从子类访问私有(private)变量

java - 为什么我无法插入可比较的文件对象?

python - Matplotlib 动画直方图

python - Docker - 无法访问 Django 服务器

python csv处理列内的逗号

python - 返回一个字典,其中不同的单词作为键,它在文本中的出现位置作为值