我对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
内部有一个名为ThreadManager
的类我希望这个类在ErrorHandling.py
中。我怎样才能做到这一点?我试过相对导入from .. import preload
。然后当我运行preload.py
时,我收到错误ValueError: Attempted relative import beyond toplevel package
。然后我尝试了from preload import ThreadManager
。但是它正在进行循环导入,所以我无法导入它。如何解决这个问题?
python版本2.7.3
答案 0 :(得分:2)
您可以使用from package.module import names
类的Memcached
语法:
from Libraries.memcached import Memcached
然后在代码中使用Memcached
代替memcached.Memcached
。
如果您需要使用其他模块中的ThreadManager
,并且遇到循环导入,则应重新组织模块。将ThreadManager
移至新模块,然后从preload
和Core.ErrorHandling
导入该类。