Python 以编程方式为 class 的每个方法设置动态自定义文档字符串
Python programmatically set dynamic custom docstring for each method of the class
我想实现动态调用一个函数并为我生成一个文档字符串并应用于我需要的 class 方法。
示例低于我所拥有的和我想要实现的目标,对于每种方法,我都有一个以三引号开头的文档字符串
目前有以下
class MyClass(BaseHandler, ABC):
def initialize(self, *args, **kwargs):
super(MyClass, self).initialize(*args, **kwargs)
self.description = 'My Class'
@authenticated()
@coroutine
def get(self):
"""
<div>Method GET</div>
<div>Description: retrieve list My Class</div>
"""
# some code here
self.write({
'success': True,
'data': self.description
})
@authenticated()
@coroutine
def post(self):
"""
<div>Method POST</div>
<div>Description: update item My Class</div>
"""
# some code here
self.write({
'success': True,
'data': self.description
})
在每个方法中,我都有一个硬编码的文档字符串并且工作正常,但我想实现使用函数插入文档字符串。
想要的结果
def generate_docstring(name, method):
docstring = """
<div>Method %s</div>
<div>Description: retrieve list %s</div>
""" % (method, name)
return docstring
class MyClass(BaseHandler, ABC):
def initialize(self, *args, **kwargs):
super(MyClass, self).initialize(*args, **kwargs)
self.description = 'My Class'
@authenticated()
@coroutine
def get(self):
# but this way does not work
self.generate_docstring(name=self.description, staticmethod='GET')
# some code here
self.write({
'success': True,
'data': self.description
})
@authenticated()
@coroutine
def post(self):
# but this way does not work
self.generate_docstring(name=self.description, staticmethod='POST')
# some code here
self.write({
'success': True,
'data': self.description
})
有什么方法可以在每个方法下使用一个函数调用并生成docstring吗?
提前致谢
您可以使用装饰器,但我觉得有一种更简单的方法可以做到这一点。
def generate_docstring(name, method, action):
def inner(obj):
obj.__doc__ = """
<div>Method {method}</div>
<div>Description: {action} {name}</div>
""".format(name=name, method=method, action=action)
return obj
return inner
class MyClass:
description = 'My Class'
@generate_docstring(description, 'GET', 'retrieve list')
def get(self):
pass
@generate_docstring(description, 'POST', 'update item')
def post(self):
pass
之后,help(MyClass)
说:
class MyClass(builtins.object)
| Methods defined here:
|
| get(self)
| <div>Method GET</div>
| <div>Description: retrieve list My Class</div>
|
| post(self)
| <div>Method POST</div>
| <div>Description: update item My Class</div>
...
我想实现动态调用一个函数并为我生成一个文档字符串并应用于我需要的 class 方法。
示例低于我所拥有的和我想要实现的目标,对于每种方法,我都有一个以三引号开头的文档字符串
目前有以下
class MyClass(BaseHandler, ABC):
def initialize(self, *args, **kwargs):
super(MyClass, self).initialize(*args, **kwargs)
self.description = 'My Class'
@authenticated()
@coroutine
def get(self):
"""
<div>Method GET</div>
<div>Description: retrieve list My Class</div>
"""
# some code here
self.write({
'success': True,
'data': self.description
})
@authenticated()
@coroutine
def post(self):
"""
<div>Method POST</div>
<div>Description: update item My Class</div>
"""
# some code here
self.write({
'success': True,
'data': self.description
})
在每个方法中,我都有一个硬编码的文档字符串并且工作正常,但我想实现使用函数插入文档字符串。
想要的结果
def generate_docstring(name, method):
docstring = """
<div>Method %s</div>
<div>Description: retrieve list %s</div>
""" % (method, name)
return docstring
class MyClass(BaseHandler, ABC):
def initialize(self, *args, **kwargs):
super(MyClass, self).initialize(*args, **kwargs)
self.description = 'My Class'
@authenticated()
@coroutine
def get(self):
# but this way does not work
self.generate_docstring(name=self.description, staticmethod='GET')
# some code here
self.write({
'success': True,
'data': self.description
})
@authenticated()
@coroutine
def post(self):
# but this way does not work
self.generate_docstring(name=self.description, staticmethod='POST')
# some code here
self.write({
'success': True,
'data': self.description
})
有什么方法可以在每个方法下使用一个函数调用并生成docstring吗?
提前致谢
您可以使用装饰器,但我觉得有一种更简单的方法可以做到这一点。
def generate_docstring(name, method, action):
def inner(obj):
obj.__doc__ = """
<div>Method {method}</div>
<div>Description: {action} {name}</div>
""".format(name=name, method=method, action=action)
return obj
return inner
class MyClass:
description = 'My Class'
@generate_docstring(description, 'GET', 'retrieve list')
def get(self):
pass
@generate_docstring(description, 'POST', 'update item')
def post(self):
pass
之后,help(MyClass)
说:
class MyClass(builtins.object)
| Methods defined here:
|
| get(self)
| <div>Method GET</div>
| <div>Description: retrieve list My Class</div>
|
| post(self)
| <div>Method POST</div>
| <div>Description: update item My Class</div>
...