Я пытаюсь создать декоратор, который вызывается внутри класса, который будет извлекать атрибуты из этого класса и использовать эти атрибуты класса для редактирования строки документации функции.
Моя проблема в том, что я нашелпримеры декораторов, которые редактируют строку документации функции (устанавливая атрибут __doc__
функции равным новой строке), и я также нашел примеры декораторов, которые извлекают атрибуты из родительского класса (путем передачи self
в декоратор), но я не смог найти пример декоратора, который мог бы делать оба.
Я пытался объединить эти два примера, но он не работает:
def my_decorator(func):
def wrapper(self, *args, **kwargs):
name = func.__name__ # pull function name
cls = self.__class__.__name__ # pull class name
func.__doc__ = "{} is new for the function {} in class {}".format(
str(func.__doc__), name, cls) # set them to docstring
return func(self, *args, **kwargs)
return wrapper
class Test():
@my_decorator
def example(self, examplearg=1):
"""Docstring"""
pass
При этом я хотел бы надеяться, что следующее вернет сообщение «Строка документа теперь новая для функции: пример»:
Test().example.__doc__
Вместо этого возвращается None
.
Редактировать: Обратите внимание, что меня не интересует, как конкретно получить доступ к имени класса, а как вообще получить доступ к атрибутам класса (где здесь self.__class__.__name__
используется в качестве примера).