gpt4 book ai didi

python - 如何通过区分类型来隔离枚举?

转载 作者:太空狗 更新时间:2023-10-30 01:56:41 24 4
gpt4 key购买 nike

下面的代码定义了两个枚举

class Insect:
BEE = 0x00
WASP = 0x01
BUMBLEBEE = 0x02


class Breakfast:
HAM = 0x00
EGGS = 0x01
PANCAKES = 0x02


b = Insect.WASP
if b == Breakfast.EGGS:
print("ok")

如条件所示,在针对完全不同的枚举进行测试时容易犯错误。我如何按类型而不是按不同的值来隔离枚举,以便上面的测试会产生错误?

更新

我看到这是从 Python 2 迁移到 Python 3 的过程中最好的点之一。

感谢 wim 的建议,如果我尝试比较苹果和橙子,以下代码将产生错误。

from enum import Enum


class Apple(Enum):
RED_DELICIOUS = 0x00
GALA = 0x01
FUJI = 0x02

def __eq__(self, other):
if type(other) is not type(self):
raise Exception("You can't compare apples and oranges.")
return super().__eq__(other)


class Orange(Enum):
NAVEL = 0x00
BLOOD = 0x01
VALENCIA = 0x02

def __eq__(self, other):
if type(other) is not type(self):
raise Exception("You can't compare apples and oranges.")
return super().__eq__(other)


apple = Apple.GALA
if apple == Orange.BLOOD:
print("ok")

最佳答案

不要为其使用自定义类。使用 stdlib 的 enum 类型,他们会在这里做正确的事情。

from enum import Enum

class Insect(Enum):
...

如果你想要一个硬崩溃:

class MyEnum(Enum):

def __eq__(self, other):
if type(other) is not type(self):
raise Exception("Don't do that")
return super().__eq__(other)

但我告诫不要采用这种设计,因为:

  1. 枚举实例通常通过身份而非相等性进行比较
  2. 在 Python 中几乎没有(没有?)用于相等比较引发错误的先例

关于python - 如何通过区分类型来隔离枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49060812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com