0

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つのファイルに結合する必要がありますか?私のコードベースの大部分はそれらに依存しているので、私は本当にそれらを別々に保ちたいと思います。

4

1 に答える 1

1

このhttp://effbot.org/zone/import-confusion.htm#circular-importsがあなたの質問に答えるかもしれないと思います。基本的に、インポートもステートメントです。モジュールの循環依存を避ける必要があります。

于 2013-02-28T03:45:00.967 に答える