微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sphinx Autodoc:如何记录装饰器添加的属性?

如何解决Sphinx Autodoc:如何记录装饰器添加的属性?

我有一个装饰器,它向 pack()添加 unpack()NamedTuple 方法,以帮助我使用 python 的 struct 模块进行序列化(参见下面的代码)。

装饰器所做的一件事是添加一个 pack_format 属性,该属性包含 struct 函数使用的格式字符串。我想知道如何记录这个。

我曾尝试在作业中使用 #: 样式的注释,但没有奏效。

我尝试的另一件事是添加 pack_format 属性而不是属性。这种工作方式,因为 sphinx 现在包含文档字符串,但我无法以与 Sphinx 正常记录属性值相同的方式查看 pack_format 属性的值(记录下来非常有用)。

def fixed_format(pack_format: str):
    def decorator(cls):
        cls.pack_format = pack_format  #: The serialization format.

        # look for a pack_values() method,or default to __iter__
        get_values = getattr(cls,'pack_values',cls.__iter__)
        def pack(self) -> bytes:
            """Serialize the package payload.

            This method was created by the :func:`fixed_format` decorator.
            """
            return struct.pack(self.pack_format,*get_values(self))

        ctor = getattr(cls,'unpack_values',cls)
        def unpack(cls,buf: bytes):
            """Deserialize the package payload and return a new instance.

            This class method was created by the :func:`fixed_format` decorator.
            """
            # look for an unpack_values() class method,or default to the class constructor
            values = struct.unpack(cls.pack_format,buf)
            return ctor(*values)

        cls.pack = pack
        cls.unpack = classmethod(unpack)
        return cls
    return decorator

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。