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 overwriting dir 関数はどのように見えるべきですか?

私はこのようなものが欲しい:

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

1 に答える 1

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']
于 2012-07-08T17:37:06.127 に答える