我有带有对象属性的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的属性),但目前为止还没有找到。有什么建议吗?谢谢。
任何解析器都无法“检测”它们。
Python有
setattr
。从任何意义上说,完整的属性集都是不可检测的。你必须在文档字符串中描述它们。
[除非你想做一堆元编程,从你从
inspect
或其他地方收集的东西中生成docstring。即使如此,只要您开始使用setattr
,您的“解决方案”也将是不完整的可以定义一个与实例变量同名的类变量。然后,当您设置该类变量时,该类变量将被实例变量隐藏。E、 克:
实际上,如果实例变量有一个有用的不可变默认值(例如None或空元组),那么您可以通过不设置变量if应该有其默认值来节省一点内存。当然,如果你在讨论一个你可能想要删除的实例变量(例如
del foo.availableruns
),这种方法是行不通的,但是我发现这不是一个很常见的情况。如果您使用的是sphinx,并且设置了“autoattribute”,那么应该适当地记录下来。或者,根据所做工作的上下文,可以直接使用Sphinx
.. py:attribute::
指令。相关问题 更多 >
编程相关推荐