当前位置: 首页 > 面试题库 >

Python Sphinx autodoc和装饰成员

沈健
2023-03-14
问题内容

我正在尝试使用Sphinx来记录我的Python类。我这样做是使用autodoc:

.. autoclass:: Bus
   :members:

虽然它可以正确地获取我的方法的文档字符串,但这些字符串是经过修饰的:

    @checkStale
    def open(self):
        """
        Some docs.
        """
        # Code

@checkStale存在

def checkStale(f):
    @wraps(f)
    def newf(self, *args, **kwargs):
        if self._stale:
            raise Exception
        return f(self, *args, **kwargs)
    return newf

的原型不正确,例如open(*args, **kwargs)

我怎样才能解决这个问题?我的印象是使用@wraps可以解决这种问题。


问题答案:

扩展我的评论:

您是否尝试过使用decorator包并将@decorator放在checkStale上?使用带有修饰功能的epydoc时,我遇到类似的问题。

正如您在评论中所问的那样,decorator包不是标准库的一部分。

您可以使用以下代码(未经测试)回退:

try:
    from decorator import decorator
except ImportError:
    # No decorator package available. Create a no-op "decorator".
    def decorator(f):
        return f


 类似资料:
  • 同我们所涵盖的其它模式一起,也有许多装饰器模式的示例能够使用jQuery来实现。jQuery.extend()允许我们将两个或者更多个对象(以及它们的属性)扩展(或者混合)到一个对象中,不论是在运行时或者动态的在一个稍后的时点上。 在这一场景中,目标对象没必要打断或者重载源/超类中现有的方法(尽管这可以被做到)就能够使用新的功能装饰起来。 在接下来的示例中,我们定义了三个对象:默认、选项和设置。任

  • 问题内容: 我想这就是它们的称呼,但我会举一些例子以防万一。 装饰类: 装饰器功能: 使用一个或另一个只是口味的问题吗?有实际区别吗? 问题答案: 如果您可以编写函数来实现装饰器,则应首选它。但是并非所有装饰器都可以轻松地编写为一个函数-例如,当您要存储一些内部状态时。 我见过人们(包括我自己)经过荒唐的努力,只用函数编写装饰器。我仍然不知道为什么,一个班级的开销通常可以忽略不计。

  • Django为视图提供了数个装饰器,用以支持相关的HTTP服务。 允许的HTTP 方法 django.views.decorators.http 包里的装饰器可以基于请求的方法来限制对视图的访问。若条件不满足会返回 django.http.HttpResponseNotAllowed。 require_http_methods(request_method_list)[source] 限制视图只能

  • 装饰器(Decorators)(被babel支持, 在 03/17 之后作为stage-2的proposal被引入) 如果你在使用类似于mobx的库, 你能够使用装饰器装饰你的函数. 装饰器本质上其实就是将组件传入一个函数. 使用装饰器能让组件更灵活,更可读并且更易修改组件的功能. 不使用装饰器的例子 class ProfileContainer extends Component { //

  • 上一篇文章将通过解决一个需求问题来了解了闭包,本文也将一样,通过慢慢演变一个需求,一步一步来了解 Python 装饰器。 首先有这么一个输出员工打卡信息的函数: def punch(): print('昵称:两点水 部门:做鸭事业部 上班打卡成功') punch() 输出的结果如下: 昵称:两点水 部门:做鸭事业部 上班打卡成功 然后,产品反馈,不行啊,怎么上班打卡没有具体的日

  • fabfile 中可以方便使用的装饰器。 fabric.decorators.hosts(*host_list) 该装饰器用于指定被装饰的函数执行在那台主机或哪些主机列表上。 例如:如果不在控制台覆盖相关参数的话,将会在 host1、host2 以及 host3 上执行 my_func,并且在 host1 和 host3 上都指定了登录用户。 @hosts('user1@host1', 'host