解释认为,同一类的两个声明都是不同
问题描述:
基本上我有一个项目设置像这样:解释认为,同一类的两个声明都是不同
<container-folder>
|- <folder_1>
|- <extra_folder>
| |- source.py
|
|- main.py
而在main.py
我声明一个类,像这样:
class ClassOne:
pass
,并在另一方法在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()
但是,我仍然得到"failed!"
打印出来。当在调试器检查,我得到了一个有点古怪的惊喜:
result
被标记为container-folder.folder_1.main.ClassOne
类型,ClassOne
有签名main.ClassOne
。为什么这两个不被认为是平等的?
我也注意到,如果我改变了代码以下,使用其完全限定类名:
if not isinstance(result, container-folder.folder_1.main.ClassOne):
我得到预期的成功。
答
他们不是同一班。这是由于一个怪癖,当你运行一个python模块(即python main.py
)时,它运行为__main__
。因此,您有__main__.SomeClass
(来自程序的根模块)和main.SomeClass
(来自source
导入的模块),它们是不同模块的不同类。
要解决您的问题,最好将该课程移到另一个模块,并从此第三个模块中同时导入main
和source
SomeClass
。
从技术上讲,你也可以从__main__
导入SomeClass
,但是你会遇到各种循环依赖的棘手问题。