我有以下列方式声明的python类:
class Foo(Structure):
_fields_ = [
("vr", c_double),
("vi", c_double),
("vm", c_float),
("va", c_float)]
它们是Structure
的子类,因为我使用ctypes
来包装C DLL,这些是C结构的镜像。我无法弄清楚如何为这些生成文档。自动生成的文档非常难看且无用:
va
Structure/Union member
vi
Structure/Union member
vm
Structure/Union member
vr
Structure/Union member
有没有人知道如何定义这些?
我只想澄清一点_fields_
实际上并不存在。这是ctypes
的一个特殊功能,它提供了一种以可以与C结构对齐的方式声明成员的方法。因此,如果我实例化对象:foo = Foo()
那么我将永远不会访问_fields_
,而是直接访问成员,就好像它们只是被声明为普通实例变量一样。因此,使用上面的实例,要访问vr
,我会执行print foo.vr
。
我在这里绊倒的是我想要添加这些变量的描述。自动生成称他们为"结构/工会成员"这是有道理的,因为它们是结构的成员,但我想添加更具描述性和有用的描述。例如,我想添加一个注释" vm"是规模和" va"是角度。
答案 0 :(得分:1)
如果删除:undoc-members:
指令的automodule
选项,则不需要的自动生成的文档会消失。
将文档字符串添加到Foo
类。在该docstring中,描述_fields_
类变量。也许最简单的方法就是简单地包括定义。像这样:
class Foo(Structure):
"""
This class is used to...
The ``_fields_`` class variable is defined as follows::
_fields_ = [
("vr", c_double),
("vi", c_double),
("vm", c_float),
("va", c_float)]
"""
_fields_ = [
("vr", c_double),
("vi", c_double),
("vm", c_float),
("va", c_float)]
这是另一种可能更接近你想要的方式:
class Foo(Structure):
"""
This class is used to...
Instances of this class have the following members:
* ``vr`` (type: c_double): whatever
* ``vi`` (type: c_double): something
* ``vm`` (type: c_float): magnitude
* ``va`` (type: c_float): angle
"""
_fields_ = [
("vr", c_double),
("vi", c_double),
("vm", c_float),
("va", c_float)]
另一种选择(使用info fields):
class Foo(Structure):
"""
This class is used to...
:ivar vr: whatever
:vartype vr: c_double
:ivar vi: something
:vartype vi: c_double
:ivar vm: magnitude
:vartype vm: c_float
:ivar va: angle
:vartype va: c_float
"""
_fields_ = [
("vr", c_double),
("vi", c_double),
("vm", c_float),
("va", c_float)]