当使用字符串类型的参数调用 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
函数试图找到一个名为“方法”。
这意味着很难为 str
的用户定义子类提供有效的文档。 pydoc.resolve
是否不可能像在 pydoc.Helper.help
中那样使用对象类型的测试,并允许用户定义的实例子类被视为其他类实例?
这个问题来自先前对相关问题的讨论 here .
最佳答案
简单的答案是,创建 str
的用户定义子类并不是最常见的情况——部分原因是用户定义的数据而非字符串数据是可变的。当你必须处理这些问题时,你已经知道如何编写 help(type(x))
,并使用 isinstance
而不是 type( …) is …
通常是正确的默认值。 (换句话说,如果您想像使用任何其他字符串一样使用 help(str(x))
来选择一个帮助主题,但这肯定更罕见。)
关于python - 为什么 python 帮助类将 str 类的子类解释为模块名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59458390/