调试时,from module import *
派上用场。但是,它似乎只导入公共功能。以_
开头的函数不会导入,但我希望它们是。
如何导入所有私有函数?
修改
我完全清楚import *
一般都是不好的做法,但有时我需要识别并解决紧急的生产问题,并在交互式调试时使用import *
来节省关键时间。
答案 0 :(得分:1)
from module import *
默认只导入所有公共名称。如果需要显式控制导入的名称,请在模块全局变量中指定由名称(作为字符串)组成的__all__
序列。您可以将私人名称添加到该列表中:
__all__ = ['PublicClass', 'public_function', '_private_function']
但是,更好的选择是不要使用from module import *
。依赖于兄弟模块的私有名称的代码应该只显式导入它们。
请注意,使用from module import *
通常是不受欢迎的,因为这会使人类读者和linters(静态代码检查程序)验证代码变得更加困难,因为您无法确定导入的名称哪些是遗失的。
答案 1 :(得分:0)
添加到 Martijn 的答案...如果您希望 import *
导入所有在模块中定义的符号,包括私有符号,这是一种简单的方法(无需明确枚举名称)是将这一行放在模块的末尾:
__all__ = list(globals().keys())