Python中的“请参阅help(type(self))以获取准确的签名。”是什么意思?

9
我在许多docstrings中看到了以下语句,当我使用help()查看类时:"查看help(type(self))以获取准确的签名。"
值得注意的是,它至少出现在scipy.stats.binom.__init__stockfish.Stockfish.__init__help()中。因此,我认为这是某种存货信息。
无论如何,我无法弄清楚它到底意味着什么。这是有用的信息吗?请注意,由于是“外部”的类,我从来没有访问self的权限。此外,如果我无法访问__init__方法的签名,则不可能实例化一个类,因此甚至不能执行help(type(my_object_instantiated))。这是一个进退两难的局面。为了使用__init__,我需要__init__的签名,但为了读取__init__的签名,我需要使用__init__实例化对象。然而,这一点纯粹是理论上的,因为即使我设法实例化一个scipy.stats.binom,它实际上返回一个完全不同的类rv_frozen的对象,其__init__ docstring中有完全相同的消息,但其签名完全不同且完全没有用。换句话说,help(type(self))实际上并不能给出准确的签名。它是无用的。
有人知道这条消息来自哪里,或者我应该如何处理它吗?这只是文档生成器中的存货垃圾,还是我使用时出错了?

你不需要实例化一个对象,只需要知道它的类名,就可以写成 help(scipy.stats.binom) - Barmar
@Barmar,这正是对help的调用,它给出了神秘的docstring“请参阅help(type(self))以获取准确的签名。”(在__init__方法下) - Him
1
我在这里找到了 See help(type(self)) for accurate signature.:https://github.com/python/cpython/blob/master/Lib/idlelib/idle_test/test_calltip.py#L71。这看起来像是IDLE的测试代码。我无法解释为什么该字符串会出现在各种库的文档字符串中。 - mzjn
1个回答

4
有一个惯例,即构造类实例的签名放在类的 __doc__ 上(因为这是用户调用的内容),而不是 __init__ (或 __new__ ),后者决定了该签名。对于扩展类型(用C编写)特别适用,其 __init__ 无法通过内省发现其签名。
您看到的消息是 type 类的一部分(请参见 help(type.__init__)),因此默认情况下由元类继承。
在某些版本中, scipy.stats.binom 会混淆问题,因为它实际上不是类型;它只是另一个类的实例(像 type 一样)可调用。因此,在其上请求 help 仅提供有关类的帮助(就像 help(1)获取 help(int)一样)-您必须查看其 __call__ 以获取更多信息(如果有)。并且,在 调用 结果上请求 help 将为返回的任何内容的实际类提供帮助,正如您观察到的那样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接