Python枚举类没有';从另一个模块导入时,无法匹配自身
这里有一个有趣的例子: 我在一个模块中创建了一个python枚举,然后在该模块和另一个模块中使用。当我在第二个模块中导入枚举时,它最终与在第一个模块中导入的值不匹配。我想将值“KnownComputers.KILLDEVIL”从第二个模块传递到第一个模块,但当我将传入的值与“KnownComputers.KILLDEVIL”进行比较时,它们的比较结果并不相等。奇怪Python枚举类没有';从另一个模块导入时,无法匹配自身,python,enums,python-import,Python,Enums,Python Import,这里有一个有趣的例子: 我在一个模块中创建了一个python枚举,然后在该模块和另一个模块中使用。当我在第二个模块中导入枚举时,它最终与在第一个模块中导入的值不匹配。我想将值“KnownComputers.KILLDEVIL”从第二个模块传递到第一个模块,但当我将传入的值与“KnownComputers.KILLDEVIL”进行比较时,它们的比较结果并不相等。奇怪 servers.py位于foo\u模块/servers.py: from enum import Enum class Known
servers.py
位于foo\u模块/servers.py
:
from enum import Enum
class KnownComputers(Enum):
KILLDEVIL = "killdevil"
LONGLEAF = "longleaf"
DOGWOOD = "dogwood"
WIGGINS = "wiggins"
ANDREWS_LAPTOP = "andrews_laptop"
CATHYS_DESKTOP = "cathys_desktop"
from servers import KnownComputers
def func( identifier ):
comp = identifier.which_computer()
if comp == KnownComputers.KILLDEVIL:
print( "Found killdevil!")
else:
print( "Found nothing!")
在该模块中用于做出决策:
foo\u模块/decision.py中的decision.py
:
from enum import Enum
class KnownComputers(Enum):
KILLDEVIL = "killdevil"
LONGLEAF = "longleaf"
DOGWOOD = "dogwood"
WIGGINS = "wiggins"
ANDREWS_LAPTOP = "andrews_laptop"
CATHYS_DESKTOP = "cathys_desktop"
from servers import KnownComputers
def func( identifier ):
comp = identifier.which_computer()
if comp == KnownComputers.KILLDEVIL:
print( "Found killdevil!")
else:
print( "Found nothing!")
(在foo\u模块/
中有一个空的\uuu init\uuuuuuuuuuuuuy.py
)
然后在我的第二个模块中,在bar\u模块/testbed.py的testbed.py
中
from foo_module.servers import KnownComputers
import foo_module.decide
class killdevil_ident:
def which_computer(self):
return KnownComputers.KILLDEVIL
ki = killdevil_ident()
foo_module.decide.func(ki)
我希望看到的是找到了杀手代码>但实际打印的是找不到任何内容代码>。这里发生了什么,我如何解决这个问题
(同样值得注意的是:我的python路径包括/path/to/foo_module
和/path/to
,因为我过于彻底/困惑了。)啊!您的问题是如何从foo_模块/decise.py
导入servers.py
:您需要明确告诉pythonservers.py
是同一模块的一部分,而不是另一模块的一部分。特别是导入语句需要更改:
from servers import KnownComputers
应该成为
from .servers import KnownComputers
这不是一个很有帮助的答案。您还没有告诉我为什么python会将/path/to/foo_module/servers.py
视为与/path/to/foo_module/servers.py
不同的文件,并将其导入两次。