如何使用import *导入私有函数?

时间:2017-03-22 11:24:05

标签: python import

调试时,from module import *派上用场。但是,它似乎只导入公共功能。以_开头的函数不会导入,但我希望它们是。

如何导入所有私有函数?

修改 我完全清楚import *一般都是不好的做法,但有时我需要识别并解决紧急的生产问题,并在交互式调试时使用import *来节省关键时间。

2 个答案:

答案 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())