実行時にメソッドのコードを生成する必要があります。任意のコードを実行し、docstringを使用できることが重要です。
exec
私はとを組み合わせた解決策を思いつきました、これsetattr
はダミーの例です:
class Viking(object):
def __init__(self):
code = '''
def dynamo(self, arg):
""" dynamo's a dynamic method!
"""
self.weight += 1
return arg * self.weight
'''
self.weight = 50
d = {}
exec code.strip() in d
setattr(self.__class__, 'dynamo', d['dynamo'])
if __name__ == "__main__":
v = Viking()
print v.dynamo(10)
print v.dynamo(10)
print v.dynamo.__doc__
同じ結果を達成するためのより良い/より安全な/より慣用的な方法はありますか?