实例返回嵌套应用程序的不正确结果



我开发了一个工具,我想在另一个应用程序中使用它。现在,我只需在新应用程序中复制我的工具。文件架构如下所示。

.
├── inner
│   ├── a
│   │   ├── a.py
│   │   └── __init__.py
│   ├── b
│   │   ├── b.py
│   │   └── __init__.py
│   ├── __init__.py
│   └── inner.py
└── outer.py

a.py

class A(object):
def output(self):
print('A')

b.py

from a.a import A

class B(object):
def output(self, a):
print('B')
print(isinstance(a, A))

inner.py

from a.a import A
from b.b import B
a = A()
b = B()
a.output()
b.output(a)

B.output 将检查第二个参数 a 是否是类 A 的实例.在文件夹inner下运行inner.py给出输出

A
B
True

但是,当我在新的应用程序文件夹下运行几乎相同的代码outer.py时,输出不是预期的。

A
B
False

outer.py

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

if __name__ == '__main__':
from inner.a.a import A
from inner.b.b import B
a = A()
b = B()
a.output()
b.output(a)

当我在 outer.py 中添加print(a)时,我得到<inner.a.a.A object at 0x7f45e179f2d0>,而不是a.a.A object

我想知道,如何集成内部应用程序以使isinstance返回正确的结果?我应该将inner下的所有文件夹添加到sys.path吗?如果是这样,我将选择删除类型检测。

这确实不时被问到,但我找不到合适的重复项。

不要在包中运行脚本,而是将其放入您将安装的可安装的 Python 包中,并使用python -m inner.inner__main__的形式运行给定的模块。

最新更新