创建“构造函数”:具有__init__签名的__new__

时间:2019-05-29 05:24:06

标签: python

问题很简单:我想创建对某个类的“构造函数”的可调用引用。我希望该构造函数具有正确的签名。

答案不只是func = MyClass,因为它没有签名(并且不是一个功能)。

>>> inspect.signature(MyClass.__call__)
<Signature (*args, **kwargs)>

答案不只是func = MyClass.__new__,因为它没有签名。

>>> inspect.signature(MyClass.__new__)
<Signature (*args, **kwargs)>

答案不只是func = MyClass.__init__,因为它返回None并且需要一个self

>>> inspect.signature(MyClass.__init__)
<Signature (self, a, b)>

因此,我需要带有__new__签名的__init__(但没有自己)。

func = MyClass.???
inspect.signature(func)
<Signature (a, b)>

最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

这对我有用:

class Test():

    def __init__(self,a,b):
        print(a)

Test("hello","world")
func = Test.__call__
func("foo","bar")

(* args,** kwargs)与(a,b)非常相似,其中* args是必需参数的数组,而** kwargs是可选参数的字典。因此,您可以正常调用它,语法糖会将数组更改为参数。