0

これが2つのpyファイルです

aa.py

import bb
b = 3
bb.foo()

bb.py

import aa
def foo():
    print(aa.b)

aa.pyから実行すると、このエラーが発生しました

Traceback (most recent call last):
  File "D:\pyproj\Mytest\src\aa.py", line 7, in <module>
    import bb
  File "D:\pyproj\Mytest\src\bb.py", line 6, in <module>
    import aa
  File "D:\pyproj\Mytest\src\aa.py", line 9, in <module>
    bb.foo()
AttributeError: 'module' object has no attribute 'foo'

別のエピソード

問題を解決したいのですが、何か面白いものや有線のものに気づきました

テストを変更しました

aa.py

print('before import bb in aa.py')
import bb
print('after import bb in aa.py')
bb.foo()
print('end of all')

bb.py

def foo():
    print('before import aa in bb.foo()')
    import aa
    print('after import aa in bb.foo()')

aa.pyから開始

before import bb in aa.py
after import bb in aa.py
before import aa in bb.foo()
before import bb in aa.py
after import bb in aa.py
before import aa in bb.foo()
after import aa in bb.foo()
end of all
after import aa in bb.foo()
end of all

誰かがこれを説明できますか?

4

2 に答える 2

4

問題は循環依存です:aaimports bb、imports aa。次に、aaを呼び出しますが、のインポートbb.foo()が完了していないため、この関数はまだ完全に定義されていません。bbaa

このような複雑な依存関係は避けたほうがよいでしょう。あなたができることはaa.b、引数としてbb.foo():に渡すことです。

aa.py

import bb
b = 3
bb.foo(b)

bb.py

def foo(b):
    print(b)
于 2012-08-31T07:30:52.813 に答える
4

これは循環依存の問題です。グローバルではなくローカルで行う必要import aaがあります。bb.py

def foo():
    import aa
    print(aa.b)
于 2012-08-31T07:32:36.697 に答える