函数的自定义 '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 的扩展(这太过分了)我看不出如何实现。
首先,我是 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 的扩展(这太过分了)我看不出如何实现。