Как добавить константную строку в __doc__ для всех методов класса?
У меня есть код, который выглядит так:
constString = """
Default docstring info:
1
2
3"""
class A():
def A1():
"""
First unique docstring.
"""
pass
def A2():
"""
Second unique docstring.
"""
pass
B = A()
print(B.A1.__doc__)
Если я запускаю этот код, я получаю вывод:
First unique docstring.
Second unique docstring.
Но я хочу заменить строку документации метода, добавив constString для всех методов в классе А. Вывод должен выглядеть следующим образом:
First unique docstring.
Default docstring info:
1
2
3
Second unique docstring.
Default docstring info:
1
2
3
Как я могу это сделать?
2 ответа
Решение
Строка документации метода экземпляра берется из базовой функции, поэтому B.A1.__doc__ += constString
не работает Тем не мение:
B.A1.__func__.__doc__ += constString
Строки документации функций доступны для записи; просто назначьте function.__doc__
; Вот декоратор, который добавляет строку в строку документации всех методов класса:
import inspect
def add_documentation(doc):
if not doc.startswith('\n'):
doc = '\n' + doc
def decorator(cls):
for func in filter(inspect.isfunction, vars(cls).values()):
func.__doc__ += doc
return cls
return decorator
Используйте это так:
@add_documentation(constString)
class A:
def A1(self):
"""
First unique docstring.
"""
pass
def A2(self):
"""
Second unique docstring.
"""
pass
Декоратор работает как в Python 2, так и в 3 и влияет только на методы, определенные непосредственно в классе, а не в каких-либо базовых классах.