如何覆盖模块上的dir / help方法?

时间:2012-07-08 16:36:58

标签: python-2.7

>>> 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]

1 个答案:

答案 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']