gpt4 book ai didi

python - 为什么装饰类会丢失其文档字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:47 24 4
gpt4 key购买 nike

我目前正在实现一个 API,我需要在其上装饰 Wrapper 类,但我希望它保留其文档字符串以供 API 用户使用。看看下面的最小工作示例:

class ClassDecorator:
"""ClassDecorator docstring
"""
def __init__(self, enableCache=True):
self.enableCache = enableCache

def __call__(self, wrapper):
def numericalmathfunction(*args, **kwargs):
func = wrapper(*args, **kwargs)
return func
return numericalmathfunction

@ClassDecorator(enableCache=True)
class Wrapper(object):
"""Wrapper docstring
Instructions on how to use the Wrapper
"""
def __init__(self, p):
self.p = p

model = Wrapper(4)
print model.__doc__
print Wrapper.__doc__

返回

Wrapper docstring
None

Wrapper 的实例会保留文档字符串,这很好,但 Wrapper 本身不会。如果用户想通过 help(Wrapper) 学习如何使用 Wrapper,他不会得到他想要的。

我知道我可以将文档字符串复制粘贴到 numericalmathfunction 中,但是装饰器将用于具有不同文档字符串的多个类。

关于如何使 numericalmathfunction 系统地继承包装类的文档字符串有什么想法吗?

最佳答案

使用functools.wraps()更新装饰器的属性:

from functools import wraps

class ClassDecorator:
"""ClassDecorator docstring
"""
def __init__(self, enableCache=True):
self.enableCache = enableCache

def __call__(self, wrapper):
@wraps(wrapper) # <-----------
def numericalmathfunction(*args, **kwargs):
func = wrapper(*args, **kwargs)
return func
return numericalmathfunction

@ClassDecorator(enableCache=True)
class Wrapper(object):
"""Wrapper docstring
Instructions on how to use the Wrapper
"""
def __init__(self, p):
self.p = p

查看 functools.wrap 的更多标准库文档.

关于python - 为什么装饰类会丢失其文档字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30714485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com