トリプルクォートされた文字列は1つの大きな文字列です。それらの内部では何も評価されません。%
パーツはすべて文字列の一部です。実際の文字列で動作させる必要があります。
def func(animalType):
"""
This is a sample function.
@param animalType: "It takes one of these animal types %(ANIMAL_TYPES)s"
""" % {'ANIMAL_TYPES': ANIMAL_TYPES}
ただし、これが正しく機能するかどうかはわかりません。docstringは少し魔法です。
これは機能しません。docstringはコンパイル時に評価され(関数の最初のステートメントとして、文字列リテラルである場合%
、文字列リテラルだけではありません)、文字列のフォーマットは実行時に行わ__doc__
れるため、空になります。
>>> def a(): 'docstring works'
...
>>> a.__doc__
'docstring works'
>>> def b(): "formatted docstring doesn't work %s" % ':-('
...
>>> b.__doc__
>>>
このように作業したい場合はfunc.__doc__ %= {'ANIMAL_TYPES': ANIMAL_TYPES}
、関数を定義した後で行う必要があります。ストリップdocstringとして定義されpython -OO
ていることを確認しなかった場合、これが中断することに注意してください。__doc__
-OO
>>> def c(): "formatted docstring works %s"
...
>>> c.__doc__
"formatted docstring works %s"
>>> c.__doc__ %= 'after'
>>> c.__doc__
"formatted docstring works after"
これはとにかく標準的な手法ではありません。標準的な手法は、適切な定数「ANIMAL_TYPESの動物タイプの1つを取る」などを参照することです。