1

我对 python 的模块系统和导入它们有一些疑问。我的应用程序具有以下结构:

preloader/   
    preload.py
    Core/
        Generator.py
        Logger.py
        ErrorHandling.py
    Libraries/
        MySQLi.py
        memcached.py

__init__.py文件甚至在根级别都存在于每个文件夹中,从结构中省略以提高可读性。

在里面preload.py我想导入memcached模块。所以我写from Libraries import memcached。在里面memcached.py我有一个名为Memcached. 所以当我必须实例化它时,我必须写这样的东西mem = memcached.Memcached()。我怎样才能避免写作modulename.classname()而只做classname()

我也在 preload.py 里面试过这个from preloader.Libraries.memcached import Memcached。那没有给我这样的模块错误!

另一个问题。有人请对相对进口有所了解。preload.py里面有一个名为ThreadManagerI want this class inside的类ErrorHandling.py。我怎样才能做到这一点?我尝试使用相对导入from .. import preload。然后当我运行时preload.py出现错误ValueError: Attempted relative import beyond toplevel package。然后我尝试了from preload import ThreadManager。但是后来它采用循环导入,所以我无法导入它。如何解决这个问题呢?

蟒蛇版本2.7.3

4

1 回答 1

2

您可以from package.module import names为您的课程使用以下语法Memcached

from Libraries.memcached import Memcached

然后在您的代码中使用Memcached而不是。memcached.Memcached

如果您需要ThreadManager从另一个模块使用,并且遇到循环导入,那么您应该重新组织您的模块。移动到一个新模块,并从和 fromThreadManager导入该类。preloadCore.ErrorHandling

于 2012-12-04T18:44:08.190 回答