【发布时间】:2020-07-17 07:16:09
【问题描述】:
让我们假设以下情况。在目录./lib 我有文件animal_enum.py (./lib/animal_enum):
from enum import Enum
class Animal(Enum):
DOG = 1
CAT = 2
COW = 3
def get_cat():
return Animal.CAT
在源目录中我有文件./animal_test.py:
def animal_test1():
from lib.animal_enum import Animal
from lib.animal_enum import get_cat
print("Results from animal_test1():")
print(Animal.CAT, get_cat())
print(Animal.CAT == get_cat())
def animal_test2():
from lib.animal_enum import Animal
import sys
sys.path.insert(0, './lib')
from animal_enum import get_cat
print("Results from animal_test2():")
print(Animal.CAT, get_cat())
print(Animal.CAT == get_cat())
if __name__ == "__main__":
animal_test1()
print('-----')
animal_test2()
在这两种情况下,枚举都被导入为from lib.animal_enum import Animal。不同之处在于我如何导入函数get_cat()。在函数animal_test1()中直接由from lib.animal_enum import get_cat完成,在函数animal_test2()中将lib目录的路径添加到sys.path变量中,并将方法导入为from animal_enum import get_cat。
现在我将值Animal.CAT 与函数get_cat 的结果进行比较,这也是Animal.CAT。我希望这两个比较都是True。但相反,我得到了以下结果:
Results from animal_test1():
Animal.CAT Animal.CAT
True
-----
Results from animal_test2():
Animal.CAT Animal.CAT
False
为什么第二个比较结果为False?
PS:防止此错误的一种方法是让动物枚举继承自 int 和 Enum:
class Animal(int, Enum):
DOG = 1
CAT = 2
COW = 3
现在,在animal_test 中,比较整数值,结果符合我的预期:
Results from animal_test1():
Animal.CAT Animal.CAT
True
-----
Results from animal_test2():
Animal.CAT Animal.CAT
True
【问题讨论】:
标签: python import enums enumeration