Python 解释器认为同一类的两个声明是不同的
基本上,我有一个这样设置的项目:Python 解释器认为同一类的两个声明是不同的,python,python-2.7,class,Python,Python 2.7,Class,基本上,我有一个这样设置的项目: <container-folder> |- <folder_1> |- <extra_folder> | |- source.py | |- main.py 在main.py中的另一个方法中,我有以下代码: result = source_function() if not i
<container-folder>
|- <folder_1>
|- <extra_folder>
| |- source.py
|
|- main.py
在main.py中的另一个方法中,我有以下代码:
result = source_function()
if not isinstance(result, ClassOne):
print "failed!"
在source.py
中,我定义了
import container-folder.folder_1.main
...
def source_function():
return main.ClassOne()
但是,我仍然会打印出“失败!”
。在调试器中检查时,我得到了一点奇怪的惊喜:
result
被标记为typecontainer folder.folder_1.main.ClassOne
,并且ClassOne
具有签名main.ClassOne
。为什么这两者不平等
我还注意到,如果我使用完全限定的类名将代码更改为以下内容:
if not isinstance(result, container-folder.folder_1.main.ClassOne):
我取得了预期的成功。他们不是同一个班级。这是由于在运行python模块(即python main.py
)时,它会作为\uuuu main\uuu
运行。因此,您有\uuuuu main\uuuuu.SomeClass
(来自程序的根模块)和main.SomeClass
(来自source
导入的模块),它们是来自不同模块的不同类
要解决您的问题,最好将类移动到另一个模块,并从第三个模块导入main
和source
导入SomeClass
从技术上讲,您也可以从\uuuuu main\uuuuu
导入SomeClass
,但随后您会遇到各种各样与循环依赖相关的棘手问题 他们不是同一类人。这是由于在运行python模块(即python main.py
)时,它会作为\uuuu main\uuu
运行。因此,您有\uuuuu main\uuuuu.SomeClass
(来自程序的根模块)和main.SomeClass
(来自source
导入的模块),它们是来自不同模块的不同类
要解决您的问题,最好将类移动到另一个模块,并从第三个模块导入main
和source
导入SomeClass
从技术上讲,您也可以从\uuuuu main\uuuuu
导入SomeClass
,但随后您会遇到各种各样与循环依赖相关的棘手问题
if not isinstance(result, container-folder.folder_1.main.ClassOne):