当使用字符串类型的参数调用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”的信息,而第二次调用会产生错误消息,因为o​​jit_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/

10-16 18:45