我在Python的枚举类(Enum class)中发现了一种非常奇怪的行为。因此,枚举类型很简单:
from enum import Enum
Analysis = Enum('Analysis', 'static dynamic')
因此,我在步骤对象中使用了这个枚举类型,以便将其存储在属性分析中,如下所示:
class Step:
def __init__(self):
self.analysis = None
self.bcs = []
到目前为止非常简单,所以当我在列表中有几个这些步骤时,然后我尝试查看枚举类型并且它已经被正确分配。但它们不相等:
# loop over steps
for s, step in enumerate(kwargs['steps']):
print(kwargs)
print(step)
print(step.analysis)
print("test for equality: ",(step.analysis == Analysis.static))
quit()
打印
{'mesh': <fem.mesh.mesh.Mesh object at 0x10614d438>,
'steps': [<hybrida.fem.step.Step object at 0x10614d278>,
<hybrida.fem.step.Step object at 0x10616a710>,
<hybrida.fem.step.Step object at 0x10616a390>]}
Step:
analysis: Analysis.static
bcs: [<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a0f0>,
<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a320>,
<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a3c8>,
<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a470>,
<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a518>,
<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a5c0>,
<hybrida.fem.conditions.dirichlet.Dirichlet object at 0x10616a668>]
Analysis.static
test for equality: False
这不正确,但我不知道如何调试。
更新
根据 @martineau 的建议,我创建了一个 IntEnum
,问题得到解决。但我仍然不明白为什么正常的 Enum
不能工作。
step.analysis
?请在你的问题中添加相关代码。 - Lukas Grafself.steps[-1].analysis = Analysis.static
。 - aaragonself.steps
列表的最后一步上设置属性 - 这是你想要的吗? - Lukas Graf