baselib.Databaseとbaselib.Applicationの2つのモジュールがあります。baselib.Applicationには、
import baselib.Database
APP = None
class BaseApplication():
def __init__(dbClass = baselib.Database.GenericDb...):
global APP
this.dbClass = dbClass
APP = this
etc...
baselib.Databaseには、
import baselib.Application
def getDB(dbClass = baselib.Application.APP.dbClass):
etc...
class GenericDB():
def __init__(self, args):
etc...
問題は、これらのモジュールのいずれかをインポートすると、次のようになります。
AttributeError: 'module' object has no attribute (modulename)
この問題は、デフォルトの引数がインポート中に評価されるという事実に起因しているようです。getDBを次のように置き換えると
def getDB(dbClass = None):
dbClass = dbClass or baselib.Application.APP.dbClass
他のデフォルトの引数でも同じことを行い、すべてが正常に機能します。これはこれを行うための最良/最もPython的な方法ですか、それとも循環依存を完全に回避して2つのモジュールを1つのファイルに結合する必要がありますか?私のコードベースの大部分はそれらに依存しているので、私は本当にそれらを別々に保ちたいと思います。