Python module and __all__

4

我试图理解如何使用__all__来管理模块。例如,我有以下结构化代码:

main.py
|=> /database
    |=> __init__.py
    |=> engine (with variables engine, session, etc.)

现在,我希望可以直接从database模块导入sessionengine实例:

from database import session

我试着在__init__.py中添加行__all__ = ['session']__all__ = ['engine.session'],但当我尝试导入时,我遇到了异常AttributeError: 'module' object has no attribute 'engine.session'
有没有什么方法可以实现所需的行为?
1个回答

5

__all__中列出的名称本身并不会将项目导入模块。它所做的只是列出要从该模块导入的名称,如果您使用from database import *语法。

session导入到database/__init__.py中:

from .engine import session

谢谢您的解决方案,但我仍然有一个问题 - 如果我在__init__.py中导入了所有必需的类/函数/变量,我就不需要担心填写__all__ - 我已经导入了所有需要的。那么,使用__all__的原因是什么? - Alex G.P.
@AlexG.P.пјҡдҪҝз”Ё__all__жқҘж Үи®°е“ӘдәӣеҗҚз§°жҳҜвҖңеҸҜеҜје…Ҙзҡ„вҖқпјӣеҰӮжһңжңүдәәжү§иЎҢfrom database import *пјҢеҲҷеҸӘдјҡеҜје…Ҙ__all__дёӯеҲ—еҮәзҡ„еҗҚз§°пјҢиҖҢдёҚжҳҜжЁЎеқ—е‘ҪеҗҚз©әй—ҙдёӯзҡ„жүҖжңүеҗҚз§°гҖӮ - Martijn Pieters
啊,它只能减少导入类型的范围,而不能增加它。非常感谢。 - Alex G.P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接