4

测试模块.py:

def __dir__():
    return ['test']

我的模块.py:

import test_module
print dir(test_module)

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

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

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

4

1 回答 1

5

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

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

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

于 2013-10-22T10:20:08.290 回答