[英]How exactly does inspect.signature work with classes?
inspect.signature
doc声明它支持类作为输入,但它没有涉及任何细节:
接受各种Python callables,从普通函数和类到
functools.partial()
对象。
如果我调用inspect.signature(MyClass)
,它会返回什么签名? 它是否返回MyClass.__init__
的签名? 或MyClass.__new__
? 或者是其他东西?
它几乎可以尝试一切。 我认为细节可能是故意没有记录的,因为它们很复杂,并且可能会更新,因为新的Python版本增加了更多的东西来尝试。
例如,从CPython 3.7.3开始, 代码路径按顺序尝试以下事项:
__call__
,它将使用元类__call__
的签名并删除第一个参数。 __new__
方法,则它使用__new__
签名并删除第一个参数。 __init__
方法,则它将使用__init__
签名并删除第一个参数。 __text_signature__
。 如果找到一个,它会解析__text_signature__
以获取签名信息。 __init__
是object.__init__
且类型的__new__
是object.__new__
,它返回object
类的签名。 (这一点有一个误导性的评论和可能涉及元类的错误 - 评论说它将检查type.__init__
,但它没有这样做。我认为这个提交可能在这里犯了错误。) ValueError
说它找不到任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.