2017-12-18 6 views
0

私は、C++でOOPを学んだ後に、Pythonでクラスを扱うことを学んでいます。 私はあるファイルで定義されたクラスを持つプロジェクトと、別のファイルのクラスで使用される重要な関数に取り組んでいます。 最初のファイルでクラスを呼び出す必要がありますが、私はImportErrorを取得しています。 お手伝いができれば嬉しいです。他のpythonファイルとそれに続くクラスのpython関数を使用していますか?

try1.py

from try2 import prnt 

class a: 
    def __init__(self): 
     print("started") 
    def func1(self): 
     print("func1") 

prnt() 

try2.py

などについては
from try1 import a 

b = a() 
b.func1() 

def prnt(): 
    b.func() 

、上記の例では、私はtry1.pyを実行しているとき、私ははImportErrorを取得しています:名前をインポートすることはできません'prnt'。

+4

周期的な輸入は決して良いことではありません。 –

+0

悪いアプローチ。私はtry1で 'import'と' prnt() '呼び出しを削除してtry2を実行することを検討したいと思います。全ての 'prnt()'は、すでに利用可能なPythonの関数 'print()'を複製しています。 – Mangohero1

答えて

0

プロジェクトを再設計する必要があります。あなたはは、環状の輸入に逃げるために管理しなかった場合であっても(関数内にimportを移動することによって、すなわち - しかし、はそれをしない)あなたはまだb以来NameError: name 'b' is not definedを取得しますprntで定義されていません。

prntがクラスa(なぜ?)で定義することができない場合を除き、第三、「utilsの」ファイルにprntを定義することを検討してtry1.pytry2.pyの両方でそれをインポートし、それがすべてにアクセスできるように、それにオブジェクトを渡しますその属性。

+0

ちょっと@Depepspace、私はこのcppコードを真似しようとしていました。これを行うための他の選択肢はありますか? 2つのcppコードは次のとおりです。try1.cpp #include "try2.h" void a :: prnt(){ \t func1(); } int main(){ \t ab(); \t ab.func1(); }及び第二try2.hは{プライベート の#includeクラスである: \tボイド関数func1(){ \t \tのstd :: COUT << "関数func1"。 \t} \t void prnt(); }; – Mayank

-2

コードを読み取ってエラーを読み、そこから何かを差し引いてください。あなたはそれを実行すると 、ここではエラーメッセージです:

Traceback (most recent call last): 
    File "C:\Users\Kilian\Desktop\Code\Garbage\tmp.py", line 7, in <module> 
    from temp2 import prnt 
    File "C:\Users\Kilian\Desktop\Code\Garbage\temp2.py", line 1, in <module> 
    from tmp import a 
    File "C:\Users\Kilian\Desktop\Code\Garbage\tmp.py", line 7, in <module> 
    from temp2 import prnt 
ImportError: cannot import name prnt 

スクリプトは、それがすでに以前にインポートしようとした何かをインポートしようとしています。 Pythonは恐らくそれをインポートできないと推測しています。 :)

+0

downvoteに感謝しますが、誰かが私にこれを与えたことを説明する気になりますか? – IMCoins

+0

私はdownvoteしませんでしたが、もう少しのガイダンスを見たいので、他の人が持っているかもしれません。この問題をより詳細に説明することは有益ですが、OPが「OK」の位置に残る可能性があります。この理由でコードが壊れていますが、どうすればいいのですか?おそらく、プロジェクトの構成要素を整理するための別の方法をお勧めします。 – Kevin

関連する問題