python中的循环模块依赖

时间:2013-02-28 02:55:37

标签: python circular-dependency python-module

我有两个模块,baselib.Database和baselib.Application。 在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

并使用其他默认参数执行相同的操作,一切正常。这是最好/最pythonic的方式,或者我应该完全避免循环依赖并将两个模块合并为一个文件?我真的很想将它们分开,因为我的代码库的很大一部分依赖于它们。

1 个答案:

答案 0 :(得分:1)

我认为http://effbot.org/zone/import-confusion.htm#circular-imports可能会回答您的问题。基本上,进口也是一种说法。我们应该避免循环模块依赖。