我有带有对象属性的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.basepath
和self.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::
指令。