Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解释器认为同一类的两个声明是不同的_Python_Python 2.7_Class - Fatal编程技术网

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
被标记为type
container 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):