8

私はnxt-pythonと呼ばれるPython用のパッケージを維持するのを手伝っています。メタクラスを使用して、コントロールオブジェクトのメソッドを定義します。使用可能な関数を定義するメソッドは次のとおりです。

class _Meta(type):
    'Metaclass which adds one method for each telegram opcode'

    def __init__(cls, name, bases, dict):
        super(_Meta, cls).__init__(name, bases, dict)
        for opcode in OPCODES:
            poll_func, parse_func = OPCODES[opcode]
            m = _make_poller(opcode, poll_func, parse_func)
            setattr(cls, poll_func.__name__, m)

追加するこれらの各メソッドに異なるdocstringを追加できるようにしたいと思います。mは、_make_poller()によって返されるメソッドです。何か案は?docstringの変更に関するPythonの制限を回避する方法はありますか?

4

2 に答える 2

17

プレーン関数の場合:

def f():  # for demonstration
    pass

f.__doc__ = "Docstring!"
help(f)

これは、python2とpython3の両方で、docstringが定義されている関数と定義されていない関数で機能します。することもできます+=__doc__であり、ではないことに注意してください__docs__

__func__メソッドの場合、メソッドの属性を使用する必要があります。

class MyClass(object):

    def myMethod(self):
        pass

MyClass.myMethod.__func__.__doc__ = "A really cool method"
于 2011-05-09T00:40:55.657 に答える
3

クラス/関数オブジェクトでsetattrを使用して、docstringを設定することもできます。

setattr(foo,'__doc__',"""My Doc string""")
于 2011-05-09T02:00:21.013 に答える