繁体   English   中英

从同一文件但从两个不同位置导入相同的 Python object 会导致两种不同的 object 类型

[英]Importing the same Python object from the same file but from two different locations results in two different object types

我有一个按目录组织的项目,如下所示:

|main_dir/
|        /__init__.py
|        /core/
|             /__init__.py
|             /foo.py
|             /test1.py            
|        /scr/
|            /test2.py

在foo.py中,我定义了一个class如下

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))

and 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'>而当我运行 test2.py 时,我得到<class 'core.foo.foo'> 我知道这就是 Python 的行为方式,但我不确定如何绕过它。 我想在检查type(f1) == type(f2)时得到True ,因为我需要访问不同位置的 object foo

添加 test2.py 的前两行:

import sys
sys.path.append('../')

到 test1.py 的顶部。 然后将 test1.py 和 test2.py 中的 foo 导入更改为使用完全限定名称:

from main_dir.core.foo import foo

之后:

# core/test.py
<class 'main_dir.core.foo.foo'>
# scr/test2.py
<class 'main_dir.core.foo.foo'>

我认为在文件 core/test1.py 你可以尝试像这样导入 foo

from .foo import foo

在文件名前加上点以确保是同一目录中的文件试一试

或者

您可以使用 as like it down 导入 foo

from .foo import foo as foo_one
from core.foo import foo as foo_core

我希望我明白你需要什么,我希望它会有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM