基本上我有一个项目设置如下:
<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):
我获得了预期的成功。
答案 0 :(得分:0)
他们不是同一个班级。这是因为当你运行python模块(即python main.py
)时,它会以__main__
运行。因此,您有__main__.SomeClass
(来自程序的根模块)和main.SomeClass
(来自source
导入的模块),它们是来自不同模块的不同类。
要解决您的问题,最好将课程移至另一个模块,并从第三个模块中同时拥有main
和source
导入SomeClass
。
从技术上讲,你也可以从SomeClass
导入__main__
,但是你会遇到循环依赖的各种棘手问题。