isinstance return 嵌套应用程序的不正确结果
isinstance return improper result with nested application
我开发了一个工具,我想在另一个应用程序中使用它。现在,我只需在新应用程序中复制我的工具。文件结构如下图
.
├── 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 是否是 class 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
return 得到正确的结果?我要把inner
下的所有文件夹都加到sys.path
里吗?如果是这样,我会选择去掉类型检测。
不时有人问我这个问题,但我找不到合适的副本。
而不是 运行ning scripts within packages,将其制作成可安装的 Python 包将安装并使用 python -m inner.inner
到 运行 给定模块作为 __main__
.
我开发了一个工具,我想在另一个应用程序中使用它。现在,我只需在新应用程序中复制我的工具。文件结构如下图
.
├── 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 是否是 class 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
return 得到正确的结果?我要把inner
下的所有文件夹都加到sys.path
里吗?如果是这样,我会选择去掉类型检测。
不时有人问我这个问题,但我找不到合适的副本。
而不是 运行ning scripts within packages,将其制作成可安装的 Python 包将安装并使用 python -m inner.inner
到 运行 给定模块作为 __main__
.