为什么__dir __()不适用于python中的模块?

时间:2013-10-22 10:17:05

标签: python

test_module.py:

def __dir__():
    return ['test']

my_module.py:

import test_module
print dir(test_module)

我预期的结果应为['test'], 但实际上,结果是:

['__builtins__', '__dir__', '__doc__', '__file__', '__name__', '__package__']

为什么__dir__()由我自己定制不起作用?

1 个答案:

答案 0 :(得分:5)

为什么需要限制模块列出的内容? dir()主要是调试工具。

通常会在对象的类型上查找Magic方法,因此对于实例,dir()会查找type(instance).__dir__。您的函数不在module类型上,而是在模块实例上。但是,您无法扩展module类型,因此您无法为模块提供自定义__dir__方法。

如果您想限制from yourmodule import *导入的内容,请改用__all__;它应该是一个列表,而不是一个函数。有关详细信息,请参阅import statement documentation