2017-02-28 2 views
1

定義されている同じモジュール内からdocstringモジュールにアクセスしようとしています。実用例:sys.modules [__ name __] .__ doc__と__doc__は常に同じですか?

#!/usr/bin/env python3 
"Module docstring that explains what the script does." 

import argparse as ap 

parser = ap.ArgumentParser(description=__doc__) 
... 

私はいつも__doc__を使用しているが、私は後でsys.module[__name__].__doc__を使用していくつかのコードにつまずきました。 2つのオブジェクトは同じであるように見えますが、私は彼らがの場合は常にと同じであると思っています。つまり、次のようになります。

>>> sys.module[__name__].__doc__ is __doc__ 
True 

いつもtrueですか?私の例ではsys.modules[__name__].__doc__の代わりに__doc__を安全に使用できますか?

答えて

3

実際には、あなたがそれらを異ならせるためにあなたの道を離れない限り、それらは同じになります。

あなたは__name__に割り当てるなら、あなたは表現が異なるモジュールを参照することができます:

"""My doc string""" 
import sys 

print(__doc__) 
__name__='sys' 
print(sys.modules[__name__].__doc__) 

は、二つの異なるドキュメントの文字列を出力します。

代わりに、あなただけでは__name__を残すことができるが、sys.modulesからあなたのモジュールを削除し、同じ__name__で別のモジュールをインポートする(またはドキュメンテーション文字列を編集した後、モジュールをリロードするのPython 2.xの使用reload()で)。古いモジュールの関数への参照を保持していれば、それでも呼び出すことができ、__doc__は古い値になりますが、sys.modules[__name__].__doc__は新しい値になります。

だから、あなたはそれが違うかもしれませんが、あなたがそれに取り組む場合に限ります。

関連する問題