当使用字符串类型的参数调用python help函数时,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”的信息,而第二次调用会产生错误消息,因为ojit_code函数正试图找到一个名为“METHODS”的模块。这意味着很难为用户定义的
pydoc.resolve
子类提供有效的文档。像str
一样,pydoc.resolve
是否不可能对对象的类型使用测试,并且不允许将用户定义的子类的实例视为其他类实例?该问题来自先前对相关问题here的讨论。
最佳答案
简单的答案是,创建用户定义的str
子类不是最常见的情况-部分是因为用户定义的数据而不是字符串数据是可变的。到您必须要处理的时候,我们可以想象您知道如何编写help(type(x))
,并且通常使用isinstance
而不是type(…) is …
是正确的默认设置。 (另一种方法是,如果要像其他字符串一样使用help(str(x))
,则必须使用ojit_code来选择帮助主题,但这肯定更罕见。)
关于python - 为什么python help class将str类的子类解释为模块名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59458390/