>>> import module1
>>> dir(module1)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']
我尝试将这样的函数放到module1代码中:
def __dir__(self):
return 'ok'
def __dir__():
return 'ok'
def __dir__(self):
print 'ok'
def __dir__():
print 'ok'
......但这些都没有。写作覆盖目录功能应该有多好看?
我想要这样的事情:
>>> import module1
>>> dir(module1)
'ok' [or ok]
答案 0 :(得分:1)
您的问题是询问如何修改dir()
对模块对象的行为,但在您的评论中,您澄清了您的最终目标是修改help(module)
的行为。 dir
在不同的对象上的工作方式不同,我认为没有直接的方法来改变模块。它总是希望列出模块的属性,即范围内的所有内容。
您可以做的是,在模块中定义__all__
属性,并指定应在帮助文档中公开哪些属性:
<强> MyModule的强>
__all__ = ['foo']
foo = 'bar'
class Klass(object):
pass
>>> import mymodule
>>> help(mymodule)
您会看到,因为Klass
被排除在__all__
之后,它将无法在帮助中显示。
此外,如果您执行from mymodule import *
,则只会导入foo属性:
>>> from mymodule import *
>>> dir()
# ['__builtins__', '__doc__', '__name__', '__package__', 'foo']