为什么在某些情况下,应用于实例的Python帮助功能会返回有关父类的页面,而在其他情况下不会返回有关父类的页面?

问题描述 投票:2回答:1

我试图了解当使用help函数查询在我的代码中创建的对象时如何获得有用的结果。我为不同的班级的不同行为感到困惑。

Cls1 = type( 'FirstClass', (str,), {'__doc__':'My new class'})
inst1 = Cls1('Hello World')

Cls2 = type( 'SecondClass', (object,), {'__doc__':'My second new class'})
inst2 = Cls2( )

[help(inst1)产生No Python documentation found for 'Hello World',而help(inst2)产生:

Help on SecondClass in module __main__ object:

class SecondClass(builtins.object)
 |  My second new class
 |  
...

我想基于str创建一个类,并能够通过help函数显示有用的消息:是否有实现此目的的简单方法?

python types help-system
1个回答
1
投票

如果要创建str的子类并使用内置的help显示提示,则可以使用文档字符串。例如以下子类

class NewString(str):
    """This is a brand new implementation of string type"""
    def test_method(self):
        """This is a test method in the new implementation"""
        pass

help(NewString)上具有以下输出

class NewString(builtins.str)
 |  This is a brand new implementation of string type
 |  
 |  Method resolution order:
 |      NewString
 |      builtins.str
 |      builtins.object
 |  
 |  Methods defined here:
 |  
 |  test_method(self)
 |      This is a test method in the new implementation
...

但是对于字符串的所有实例,help方法将无用。

失败的原因是,将str传递给内置help时,它将被视为函数的名称,并且显然没有名为Hello World的函数会显示错误。

运行以下help('help')将输出:

Help on _Helper in module _sitebuiltins object:

help = class _Helper(builtins.object)
 |  Define the builtin 'help'.
 |  
 |  This is a wrapper around pydoc.help that provides a helpful message
 |  when 'help' is typed at the Python interactive prompt.
 |  
 |  Calling help() at the Python prompt starts an interactive help session.
 |  Calling help(thing) prints help for the python object 'thing'.
...

这是help的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.