gpt4 book ai didi

python - 为什么 python 帮助类将 str 类的子类解释为模块名称?

转载 作者:行者123 更新时间:2023-12-02 04:21:33 25 4
gpt4 key购买 nike

当使用字符串类型的参数调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com