我有一个容器类(来自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}$
看看pydoc源代码,罪魁祸首是:
它尝试查找
thing.__name__
,如果失败,则返回None。但是,在您的例子中,它不会失败;而是从__getattr__
取回一个值。在如果要重写
^{pr2}$__getattr__
,那么最好对所有特殊属性进行特殊处理。比如:这可以确保,如果类没有特定的特殊属性(在本例中,
__name__
),则查找它将失败,而不是生成意外的值。在相关问题 更多 >
编程相关推荐