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__()
由我自己定制不起作用?
答案 0 :(得分:5)
为什么需要限制模块列出的内容? dir()
主要是调试工具。
通常会在对象的类型上查找Magic方法,因此对于实例,dir()
会查找type(instance).__dir__
。您的函数不在module
类型上,而是在模块实例上。但是,您无法扩展module
类型,因此您无法为模块提供自定义__dir__
方法。
如果您想限制from yourmodule import *
导入的内容,请改用__all__
;它应该是一个列表,而不是一个函数。有关详细信息,请参阅import
statement documentation。