我有带有对象属性的Python类,这些对象属性仅在运行构造函数时声明为:

class Foo(object):
    def __init__(self, base):
        self.basepath = base

        temp = []
        for run in os.listdir(self.basepath):
            if self.foo(run):
                temp.append(run)
        self.availableruns = tuple(sorted(temp))

如果我现在使用help(Foo)或尝试在Sphinx中记录Foo,将不显示self.basepathself.availableruns属性。对于我们的API用户而言,这是一个问题。

我尝试过寻找一种标准方法,以确保解析器可以找到这些“动态声明的”属性(最好是docstring'd),但到目前为止还算不上什么。有什么建议么?谢谢。

最佳答案

您可以定义一个与实例变量同名的类变量。设置后,该实例变量将被该实例变量遮盖。例如:

class Foo(object):
    #: Doc comment for availableruns
    availableruns = ()

    def __init__(self, base):
        ...
        self.availableruns = tuple(sorted(temp))
确实,如果实例变量具有有用的不可变默认值(例如,“无”或空的元组),则可以通过设置变量的默认值而不设置变量来节省一些内存。当然,如果您要谈论的是您想要删除的实例变量(例如del foo.availableruns),则这种方法将行不通-但我发现这不是很常见的情况。
如果您使用的是狮身人面像,并设置了“自动属性”,则应该对此进行适当记录。或者,根据您正在执行的操作的上下文,您可以直接使用Sphinx .. py:attribute::指令。

09-11 18:24
查看更多