重写“getattr”会使help(…)因TypeE而失败

2024-09-30 04:35:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个容器类(来自list的子类),在这里我重写了geattr方法

def __getattr__(self, name):
    def _multiplexed(*args, **kwargs):
        return [getattr(R, name)(*args, **kwargs) for R in self]
    return _multiplexed

问题是现在我不能向Python请求关于我的对象的帮助。当我请求帮助时,我得到(从iPython回溯)下面复制的错误。在

所以问题是:如何在不失去求救能力的情况下重写getattr?在

谢谢, 杰里米

^{pr2}$

Tags: 方法nameinselfforreturndefargs
1条回答
网友
1楼 · 发布于 2024-09-30 04:35:29

看看pydoc源代码,罪魁祸首是:

getattr(thing, '__name__', None)

它尝试查找thing.__name__,如果失败,则返回None。但是,在您的例子中,它不会失败;而是从__getattr__取回一个值。在

如果要重写__getattr__,那么最好对所有特殊属性进行特殊处理。比如:

^{pr2}$

这可以确保,如果类没有特定的特殊属性(在本例中,__name__),则查找它将失败,而不是生成意外的值。在

相关问题 更多 >

    热门问题