在help()
编写类时,我在许多文档字符串中看到以下语句:“请参见help(type(self))
以获取准确的签名。”
值得注意的是,它至少在help()
和scipy.stats.binom.__init__
的{{1}}中。因此,我认为这是某种股票消息。
无论如何,我不知道这到底意味着什么。这是有用的信息吗?请注意,可以说,在全班“之外”,我从来没有访问过stockfish.Stockfish.__init__
的权限。此外,如果我无法访问self
方法的签名,因此甚至不能执行__init__
,则无法实例化一个类。这很容易理解。22.为了使用help(type(my_object_instantiated))
,我需要__init__
的签名,但是为了读取__init__
的签名,我需要使用{{1 }}。这一点严格来说是学术性的,即使我确实实例化了__init__
,它实际上返回的是一个完全 different 类__init__
的对象,其对象完全相同scipy.stats.binom
文档字符串中显示一条消息,但是其签名完全不同,使用的效率也大大降低。换句话说,rv_frozen
实际上没有给出准确的签名。这没用。
有人知道此消息来自何处,或者我应该怎么做?仅仅是来自文档生成器的垃圾,还是我在误用户?
答案 0 :(得分:1)
有一个约定,用于构造类实例的签名放置在 class 上的__doc__
中(因为这就是用户的调用),而不是{{1} }(或__init__
)来确定该签名。对于__new__
无法通过自省发现其签名的扩展类型(用C编写)尤其如此。
您看到的消息是__init__
类的一部分(请参见type
),因此默认情况下由元类继承。
在某些版本中,help(type.__init__)
由于实际上不是类型而使事情变得混乱;可以调用的只是另一个类的实例(如scipy.stats.binom
)。因此,在其上询问type
仅能为那个类提供帮助(就像help
会给您help(1)
一样),您必须查看其{{1 }},以获取更多信息(如果有)。如您所观察到的,并要求help(int)
调用 的结果,它将为返回的实际类提供帮助。