10.2 控制模�被全部导入的内容¶
问题¶
当使用’from module import *’ è¯å�¥æ—¶ï¼Œå¸Œæœ›å¯¹ä»Žæ¨¡å�—或包导出的符å�·è¿›è¡Œç²¾ç¡®æŽ§åˆ¶ã€‚
解决方案¶
åœ¨ä½ çš„æ¨¡å�—ä¸å®šä¹‰ä¸€ä¸ªå�˜é‡� __all__ æ�¥æ˜Žç¡®åœ°åˆ—出需è¦�导出的内容。
举个例å�:
# somemodule.py
def spam():
pass
def grok():
pass
blah = 42
# Only export 'spam' and 'grok'
__all__ = ['spam', 'grok']
讨论¶
尽管强烈å��对使用 ‘from module import *’, 但是在定义了大é‡�å�˜é‡�å��的模å�—ä¸é¢‘ç¹�使用。 å¦‚æžœä½ ä¸�å�šä»»ä½•事, è¿™æ ·çš„å¯¼å…¥å°†ä¼šå¯¼å…¥æ‰€æœ‰ä¸�以下划线开头的。 å�¦ä¸€æ–¹é�¢,如果定义了 __all__ , 那么å�ªæœ‰è¢«åˆ—举出的东西会被导出。
å¦‚æžœä½ å°† __all__ 定义æˆ�一个空列表, 没有东西将被导入。 如果 __all__ 包å�«æœªå®šä¹‰çš„å��å—, 在导入时引起AttributeError。