使用字符串类型的参数调用python帮助功能时,pydoc.Helper.help
会将其解释为对有关由字符串值标识的主题,符号,关键字或模块的信息的请求。对于其他参数,除非对象是str
子类的实例,否则将提供有关对象本身的帮助。在后一种情况下,pydoc.resolve
函数将查找名称与对象值匹配的模块,如果找不到则引发异常。
为说明这一点,请考虑示例代码:
class Extra(object):
def NewMethod(): return 'New'
Cls1 = type( 'FirstClass', (str,Extra), {'__doc__':'My new class','extra':'An extra attribute'})
inst1 = Cls1('METHODS')
help( 'METHODS' )
help( inst1 )
第一次调用help
会产生关于主题“ METHODS”的信息,而第二次调用会产生错误消息,因为pydoc.resolve
函数正试图找到一个名为“ METHODS”的模块。
这意味着很难为用户定义的str
子类提供有效的文档。 pydoc.resolve
是否不能像pydoc.Helper.help
那样对对象的类型进行测试,并且不能将用户定义的子类的实例视为其他类实例?< / p>
该问题来自先前对相关问题here的讨论。
答案 0 :(得分:0)
简单的答案是,创建str
的用户定义子类不是最常见的情况—部分原因是用户定义的数据而不是字符串数据是可变的。在您不得不处理此类问题时,可以想象您知道如何编写help(type(x))
,并且通常使用正确的默认设置是使用isinstance
而不是type(…) is …
。 (另一种方法是,如果您想像其他字符串一样使用help(str(x))
来选择一个帮助主题,那肯定更罕见。)>