从同一文件但从两个不同位置导入相同的 Python 对象会产生两种不同的对象类型
我有一个按如下目录组织的项目:
|main_dir/
| /__init__.py
| /core/
| /__init__.py
| /foo.py
| /test1.py
| /scr/
| /test2.py
在 foo.py 中,我定义了一个类,如下所示
class foo(object):
def __init__(self):
pass
这是我在 core/test1.py 中的内容
from foo import foo
f1=foo()
print(type(f1))
这是我在 scr/test2.py 中的内容:
import sys
sys.path.append('../')
from core.foo import foo
f2 = foo()
print(type(f2))
main_dir/__init__ .py
包含:
__all__ = ["core"]
import sys, os
dir = os.path.dirname(__file__)
for subpackage in __all__:
sys.path.append(os.path.join(dir,subpackage))
并且 core/__init__.py
包含:
__all__ = ["foo"]
import sys, os
dir = os.path.dirname(__file__)
for subpackage in __all__:
sys.path.append(os.path.join(dir,subpackage))
当我运行 test1.py 时,结果是 class 'foo.foo'>
while当我跑步时test2.py,我得到
。我知道这就是 Python 的行为方式,但我不知道如何解决它。我想在检查 type(f1) == type(f2)
时得到 True
,因为我需要访问不同位置的对象 foo
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将 test2.py: 中的前两行添加
到 test1.py 的顶部。然后更改 test1.py 和 test2.py 中 foo 的导入以使用完全限定名称:
之后:
Add the first two lines from test2.py:
to the top of test1.py. Then change your imports of foo in test1.py and test2.py to use the fully-qualified name:
Afterward:
我认为在文件 core/test1.py 中,您可以尝试像这样
在文件名前加点来导入 foo,以确保同一目录中的文件尝试一下
,或者
您可以使用像这样的方式导入 foo
我希望我了解您需要什么,希望对您有所帮助
I think in file core/test1.py You can try to import foo like this
with the dot before the file name to ensure that is the file in the same directory gave it a try
or
You can import foo using as like it down
I hope I understand what do you need and I hope it will help