0
>>> 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'

...但这些都没有。writen 覆盖 dir 函数应该看起来有多好?

我想要这样的东西:

>>> import module1
>>> dir(module1)
'ok' [or ok]
4

1 回答 1

1

您的问题是询问如何修改dir()模块对象的行为,但在您的评论中您澄清说您的最终目标是修改help(module). dir在不同的对象上工作方式不同,我不相信有直接的方法可以改变模块。它总是希望列出模块的属性,即范围内的所有内容。

但是,您可以做的是__all__在模块中定义一个属性,并指定应该在帮助文档中公开哪些属性:

我的模块

__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']
于 2012-07-08T17:37:06.127 回答