2017-01-25 5 views
-1

私は他のスクリプトの内部にある整数にアクセスしてインクリメントする方法を理解しようとしています。私hierachyは、このようなものです:他のスクリプトから整数をインクリメント

- TestDirectory 
-- foo.py 
-- bar.py 

例:

foo.py

import TestDirectory.bar as bar 
def main(): 
    testCounter = 0 
    bar.increment() 
    print(testCounter) 

main() 

bar.py

import TestDirectory.foo as foo 
def increment(): 
    foo.main().testCounter += 1 

私は私のプリントが1を返すことが期待されるが、それは私にエラーを与える:

AttributeError: module 'TestDirectory' has no attribute 'bar' 

は、誰もが私の問題を説明したり、解決することはできますか?

+1

これはうまくいきません。しかし、あなたが直面する問題は、私が思うには周期的な輸入です。 –

+0

周期的なインポートに関する問題とは別に、このエラーを再現できません。私は 'TestDirectory'の外側から' ImportError:モジュール名 'TestDirectory''を実行しようとしました。 –

+0

あなたはそのような問題にどのようにアプローチするか考えていますか? – Anonymous

答えて

0

必要としている他の誰を助けるために私の解決策を投稿します!

- Folder1 
-- bar.py 
- Folder2 
-- foo.py 

ソリューション:

foo.py

from Folder1 import bar 
def main(): 
    bar.increment() 
    print(bar.counter) 

main() 

バー

Hierachyは、この(それは問題ないはずにもかかわらず)のようなものです。 py

counter = 0 
def increment(): 
    global counter 
    counter += 1 
1

私はあなたのエラーを再現することができません(それは問題ではありません)が、あなたはここで周期的なインポートでうんざりしているようです。 bar.py

  • は、入力パラメータとしてintを取り、それを更新した後に返すようにincrement機能の動作を変更する次のように

    あなたのケースで巡回問題を回避するための簡単な方法です。

  • foo.pyには、testCounterを送信してその戻り値をキャッチするようにmainを更新します。
  • のサイクリックインポートを削除している間にインポートステートメントをfoo.pyに修正します(規約によります)。

ここでは、この問題をソートするための最小限のコード変更を示します。
P.S:TestDirectoryフォルダ内から実行しています。あなたのコードに問題の

foo.py

import bar 

def main(): 
    testCounter = 0 
    testCounter = bar.increment(testCounter) 
    print(testCounter) 

main() 

bar.py

def increment(testCounter): 
    testCounter += 1 
    return testCounter 
0

ロット:

  1. 変数のメソッドでは、メソッドに対してローカルですあなたは関数の外からそれらにアクセスすることはできません、foスクリプトの外側(つまり、モジュール)
  2. ちょうどあなたがfooからbarbarからfooにアクセスしたいので、あなたがして回避することができ巡回輸入で終わるスクリプト自体
  3. の名前を使用して、同じフォルダに別のモジュールをインポートするには地元の輸入

はここにあなたの問題を解決だが、チャンスはあなたの代わりに何をI "メートルの提供の設計変更で良くやる、以下のとおりです。

foo.py

import bar 

testCounter=0 

if __name__=="__main__": 
    bar.incrementTestCounter() 
    print bar.getTestCounterValue() 

bar.py

def incrementTestCounter(): 
    import foo 
    foo.testCounter=foo.testCounter+1 

def getTestCounterValue(): 
    import foo 
    return foo.testCounter 
関連する問題