作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面的代码定义了两个枚举
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)
但我告诫不要采用这种设计,因为:
关于python - 如何通过区分类型来隔离枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49060812/
我是一名优秀的程序员,十分优秀!