函数的自定义 'self' 表达式

Custom 'self' expression for functions

首先,我是 Whosebug 的超级新手,对如何提出问题并不太了解,所以请原谅我犯的任何重大错误。

无论如何,我目前正在尝试为函数创建一种引用自身的方法。为此,我创建了一个如下所示的包装器:

def custom_self(func):
    def wrapped(*args, **kwargs):
        return func(func, *args, **kwargs)
    return wrapped

老实说,非常标准的东西。我现在可以将这个包装器用作任何应该引用自身的新函数的装饰器。但是,我使用 Visual Studio 代码作为编辑器,每当我将鼠标悬停在我的新函数上时,它都会显示如下内容:

Screenshot(抱歉,显然我还不允许添加图片)

现在,如您所见,代码镜头显示了函数所需的所有参数。然而,这包括参数 'own' ,它应该是对函数本身的引用。因此它不是一个参数,您可以实际传递给函数,类似于 class 方法的工作方式。我现在的问题是:我怎样才能让代码镜头只显示参数 'arg_1' 和 'arg_2'?

(This is what is displayed. 如您所见,编辑器认为我传递了参数 'own',而实际上我传递的是参数 'arg_1'。代码的工作方式与我希望的一样但是显示有点失败。)

我已经试过像这样使用 'typing.overload' 作为装饰器:

@typing.overload
def new_func(arg_1, arg_2): ...

@custom_self
def new_func(own, arg_1, arg_2):
    own.arg_1 = arg_1
    own.arg_2 = arg_2
    ...

这有效,代码镜头现在只显示 'arg_1' 和 'arg_2' 作为参数,但老实说,这不是一个非常漂亮的解决方案,因为这意味着我必须创建一个每个自引用函数都是虚拟的,而且我还必须将每个函数声明两次,这使得它更少 'pythonic',我猜。

我也尝试过装饰'custom_self'函数,但是这也没有得到我想要的结果。

同样,代码工作正常,这只是一个显示错误。但这是一个相当烦人的问题。

镜头指示 own, arg_1, arg_2 因为那是函数在修饰之前的实际签名。
而且我猜 VS Code 不会象征性地执行装饰器代码来确定实际签名将只是 arg_1, arg_2 因为 own 将被动态提供。
你一下子要求太多了。

没有为每个函数指定最终签名(这不是你想要的),除了 IDE 的扩展(这太过分了)我看不出如何实现。