Ara*_*Fey 6 python class signature
该inspect.signature
文档指出它支持将类作为输入,但是并没有涉及任何细节:
接受从纯函数和类到
functools.partial()
对象的各种Python可调用对象。
如果我致电inspect.signature(MyClass)
,它返回什么签名?它是否返回的签名MyClass.__init__
?还是MyClass.__new__
?或者是其他东西?
use*_*ica 10
它会尽其所能尝试几乎所有内容。我认为这些细节可能是故意未记录在案的,因为它们很复杂并且可能会越来越多,因此随着新的Python版本增加了更多尝试的内容。
例如,从CPython 3.7.3开始,代码路径按顺序尝试以下操作:
__call__
在Python中定义的自定义,则它将使用该元类的签名__call__
并删除第一个参数。__new__
Python定义的方法,则它将使用__new__
签名并删除第一个参数。__init__
用Python定义的方法,则它将使用已__init__
删除第一个参数的签名。__text_signature__
。如果找到一个,它将进行分析__text_signature__
以获取签名信息。__init__
为object.__init__
,类型__new__
为object.__new__
,则返回object
类的签名。(这时有一个误导性的注释,并且可能包含涉及元类的错误-注释说它将要检查type.__init__
,但并没有这样做。我认为此提交可能在这里犯了一个错误。)ValueError
说法:找不到任何东西。