我有两个模块,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)
问题似乎源于在导入期间评估默认参数的事实;如果我用
替换getDBdef getDB(dbClass = None):
dbClass = dbClass or baselib.Application.APP.dbClass
并使用其他默认参数执行相同的操作,一切正常。这是最好/最pythonic的方式,或者我应该完全避免循环依赖并将两个模块合并为一个文件?我真的很想将它们分开,因为我的代码库的很大一部分依赖于它们。
答案 0 :(得分:1)
我认为http://effbot.org/zone/import-confusion.htm#circular-imports可能会回答您的问题。基本上,进口也是一种说法。我们应该避免循环模块依赖。