gpt4 book ai didi

python - 在主 Python 模块中调用 isinstance

转载 作者:太空狗 更新时间:2023-10-29 22:30:32 25 4
gpt4 key购买 nike

如果在 __main__ 空间中使用 isinstance 会有一个奇怪的行为。

考虑以下代码

a.py:

class A(object):
pass

if __name__ == "__main__":
from b import B
b = B()
print(isinstance(b, A))

b.py

from a import A
class B(A):
pass

主要.py

from a import A
from b import B

b = B()
print(isinstance(b, A))

当我运行 main.py 时,我得到了 True,正如预期的那样,但是当我运行 a.py 时,我得到了 。看起来 A 的名称正在那里获得前缀 __main__

如何获得一致的行为?我需要在 a.py 中导入 B 以在文件 a.py 上运行 doctest

最佳答案

W因此,当您运行 a.py 时,Python 会读取 a.py 并执行它。在这样做的同时,它导入了模块 b,而后者又导入了模块 a,但它没有重用之前解析的定义。所以现在你在 a.py 中有两个定义副本,称为模块 __main__a 因此不同的 __main__.A a.A

一般来说,你应该避免导入你正在执行的模块。相反,您可以创建一个新文件来运行 doctests 并使用类似

import a
import doctest

doctest.testmod(a)

并从模块 a 中删除 __main__ 部分。

关于python - 在主 Python 模块中调用 isinstance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22322630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com