2016-06-14 11 views
1

ている基本的に私はそうのように設定したプロジェクトを持っていると考えてmain.pyでの方法私は次のコードを持っている:でインタプリタは、同じクラスの2つの宣言が異なる

result = source_function() 
if not isinstance(result, ClassOne): 
    print "failed!" 

をは、私はまだ"failed!"プリントアウトを取得、しかし

import container-folder.folder_1.main 
... 
def source_function(): 
    return main.ClassOne() 

定義します。デバッガで調べるとき、私は奇妙な驚きのビットを得た:

resultはタイプcontainer-folder.folder_1.main.ClassOneとしてマークされ、そしてClassOneは、署名main.ClassOneを持っていました。なぜこれらの2つは等しいと見なされないのですか?

また、私はその完全修飾クラス名使用して、次のようにコードを変更した場合は次のように述べている。

if not isinstance(result, container-folder.folder_1.main.ClassOne): 

を私は期待される成功を得ます。

答えて

0

これらは同じクラスではありません。これは、あなたがPythonモジュール(つまり、python main.py)を実行すると、__main__として実行されるという点では奇抜です。したがって、あなたは(プログラムのルートモジュールから)と(sourceによってインポートされたモジュールから)を持っています。これらは異なるモジュールからの異なるクラスです。

問題を解決するには、クラスを別のモジュールに移動し、mainsourceの両方をこの3番目のモジュールからインポートSomeClassにすることをお勧めします。

技術的には、を__main__からインポートすることもできますが、循環依存性に関するあらゆる種類の問題が発生します。

関連する問題