completion/intellisense 关于 (*args ,**kwargs) 函数

completion/intellisense on (*args ,**kwargs) functions

有没有办法让 completion/intellisense on (*args ,**kwargs) 函数?

例如:

class GetVar(GetVarInterface):
    @classmethod
    def fromcustom(cls,locorvar,offset=0,varType="int", name=None,deref=False,member=None):
        return GetVarCustom(locorvar,offset,varType, name,deref,member)

class GetVarCustom(GetVar):
    def __init__(self,locorvar,offset=0,varType="int", name=None,deref=False,member=None):

我想在不指定构造函数的每个参数(例如使用 *vars、**kwargs)的情况下实现它,但不想失去 completion/intellisense 能力。有办法吗?

当前实现的缺点是每次更改都必须复制签名两次...

唯一的办法就是在函数下加注释提示参数,否则不行;如果 ide 读到一个函数有未定义的参数,它会告诉你它是未定义的。 一个“解决方案”是只使用公共参数并将其余参数作为 kwargs 传递,或者您可以保留原始 init。

class Single_Init:

    def __init__(self, val_a, val_b, name=None):
        self.val_a = val_a
        self.val_b = val_b
        self.name = name

class Single_Init_B(Single_Init):

    # The previous contructor is calld

    def get_result(self):
        return self.val_a + self.val_b

class Split_Const:

    def op_offset(self, offset):
        self.offset = offset

    def __init__(self, name, member=None, **kwargs):
        """ You olso can hint in a func coment """
        self.name = name
        self.member = member

        if 'offset' in kwargs:
            self.offset = kwargs['offset']
        else:
            self.offset = None

if __name__ == '__main__':
    single = Single_Init_B(2, 3)
    print('Single:', single.get_result())

    split = Split_Const('Name')
    split.op_offset(0.5)
    print('Split:', split.offset)

在该站点外找到解决方案..

@functools.wraps(functools.partial(GetVarCustom.__init__,1))
def f(*args,**kwargs):
     return GetVarCustom(*args,**kwargs)

当然,如果是标准函数,那就更容易了。但是,您需要更新包装的分配属性。否则会改变函数名。

@functools.wraps(GetVarCustom.value,assigned=['__doc__'])
def getvalue(*args,**kwargs):
     return self_custom.value(*args,**kwargs)