gpt4 book ai didi

python - __getattr__ 定义属性的文档

转载 作者:太空狗 更新时间:2023-10-30 01:30:08 25 4
gpt4 key购买 nike

我必须自定义 __getattr__ 来调用另一个函数来读取。

除了 help(object.attr) 不起作用外,这很好用。此代码用于交互式环境,因此 help() 对我们来说变得很重要。

是否有更好的设计来实现相同的功能,但 help() 运行良好。

最佳答案

用于“帮助”的文本确实是对象的“__doc__”属性。问题在于,根据您拥有的对象,您不能简单地为其设置 __doc__ 属性。

如果你需要的是“help(object.attr)”来工作(而不是 help(object) 显示所有可能的属性)它有点更简单 - 你应该只确信无论 __getattr__ 返回的是一个正确设置的文档字符串。

因为“它不工作”我猜你正在返回一些函数调用的内部结果,就像这个片段:

def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an integer
return foo()
...

如果您只是简单地返回函数“foo”本身,而不调用它,它的文档字符串将正常显示。

可以做的是将返回值包装在 __getattr__ 中作为一个动态创建的类的对象,其中包含一个适当的文档字符串 - 所以,尝试使用这样的东西:

def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an (whatever object)
result = foo()
res_type = type(result)
wrapper_dict = res_type.__dict__.copy()
wrapper_dict["__doc__"] = foo.__doc__ #(or "<desired documentation for this attribute>")
new_type = type(res_type.__name__, (res_type,), wrapper_dict)
# I will leave it as an "exercise for the reader" if the
# constructor of the returned object can't take an object
# of the same instance (python native data types, like int, float, list, can)
new_result = new_type(result)
elif ...:
...
return new_result

这应该有效 - 除非我首先弄错了 hel 不工作的动机 - 如果是这样,请举例说明你从 __getattr__ 返回的内容。

关于python - __getattr__ 定义属性的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com