Gra*_*ham 12 python python-3.x
在隔离一个bug几个小时后,我想出了以下MCVE示例来演示我遇到的问题:
a.py:
from b import get_foo_indirectly
class Foo:
pass
if __name__ == '__main__':
print("Indirect:", isinstance(get_foo_indirectly(), Foo))
print("Direct:", isinstance(Foo(), Foo))
Run Code Online (Sandbox Code Playgroud)
b.py:
def get_foo_indirectly():
from a import Foo
return Foo()
Run Code Online (Sandbox Code Playgroud)
a.py的预期输出是:
Indirect: True
Direct: True
Run Code Online (Sandbox Code Playgroud)
实际输出是:
Indirect: False
Direct: True
Run Code Online (Sandbox Code Playgroud)
此外,如果我创建一个单独的模块c.py,输出是按预期的:
from a import Foo
from b import get_foo_indirectly
if __name__ == '__main__':
print("Indirect:", isinstance(get_foo_indirectly(), Foo))
print("Direct:", isinstance(Foo(), Foo))
Run Code Online (Sandbox Code Playgroud)
显然,isinstance进口机械之间的相互作用并不像我预期的那样.好像使用循环进口让我很难受.为什么?这是Python的预期行为吗?
请注意,这对我遇到此行为的实际上下文非常简单; 模块a和b都是大模块,而b是分开的,因为它有一个与a不同的目的.现在我已经看到了循环进口的后果,我可能会将它们结合起来,也许会降低b中一些冗长的行为.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |