0

我有两个模块,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 方式,还是我应该完全避免循环依赖并将两个模块组合到一个文件中?我真的很想将它们分开,因为我的大部分代码库都依赖于它们。

4

1 回答 1

1

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

于 2013-02-28T03:45:00.967 回答