问题标签 [decorator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
238 浏览

python - 装饰器是装饰对象的属性?

我想创建一个装饰器,它允许我引用被装饰的对象并从中获取另一个装饰器,就像你可以在属性上使用 setter/deleter 一样:

具体来说,我希望它的行为与属性基本相同,但模拟一个序列而不是单个值。这是我第一次尝试它,但它似乎不起作用:

我很确定这c.__setitem__ = set是错误的,但我不知道如何在那时获取对实例的引用。想法?

Alex Martelli 的解决方案适用于 2.6,但它在 2.4 和 2.5 上失败了(我希望它也适用于这些旧版本,尽管这不是绝对必要的):

2.4:

2.5:

2.6:

0 投票
4 回答
1142 浏览

python - Python 装饰器应该多久使用一次?

我最近开始尝试使用 Python 装饰器(和高阶函数),因为看起来它们可能会使我的 Django 单元测试更加简洁。例如,而不是写:

我可以改为

然而,经过一些实验,我发现装饰器并不像我希望的那么简单。首先,我对在不同示例中发现的不同装饰器语法感到困惑,直到我了解到装饰器在接受参数时的行为非常不同。然后我尝试装饰一个方法,最终发现它不起作用,因为我首先必须通过添加一个将我的装饰器变成描述符__get__方法。在整个过程中,我已经多次感到困惑,但仍然发现调试这个“装饰”的代码比通常的 Python 更复杂。我现在正在重新评估我的代码中是否真的需要装饰器,因为我最初的动机是节省一些打字,而不是因为有任何东西真正需要高阶函数。

所以我的问题是:应该自由使用装饰器还是谨慎使用?避免使用它们是否更像 Pythonic?

0 投票
2 回答
926 浏览

python - Python Decorator 3.0 和装饰器的参数

我很高兴看到最新版本的decoratorpython 模块(3.0)。它看起来比以前的迭代更简洁(例如语法比以往任何时候都更甜美)。

然而,对于自己接受参数的装饰器,它似乎有糟糕的支持(例如,“酸”的语法,以可怕地延伸隐喻)。有没有人有一个很好的例子来说明你如何使用decorator3.0 干净地做到这一点?

0 投票
3 回答
1375 浏览

python - 装饰器标记一个方法执行不超过一次,即使被调用多次

我将直接上示例:

我试图定义execonce但无法编写一个适用于方法的。

PS:我无法定义__init__for中的代码必须在对象初始化后的某个initialize时间调用。cf - cmdln 问题 13

0 投票
6 回答
710 浏览

python - 这些类型的 python 装饰器是如何编写的?

我想编写一个装饰器来限制函数可以执行的次数,遵循以下语法:

我认为可以编写这种类型的装饰器,但我不知道如何。我认为一个函数不会是这个装饰器的第一个参数,对吧?我想要一个“普通的装饰器”实现,而不是带有调用方法的类。

这样做的原因是要了解它们是如何编写的。请解释语法,以及该装饰器是如何工作的。

0 投票
9 回答
6391 浏览

c# - How to use C#-like attributes in C++

I'm considering the use of C++ for a personal project. I would like to make it platform independent (no Mono please, since some platforms don't yet support it), and that's why I considered C++.

I have one doubt, however. I've grown quite fond of C#'s attributes, and I would like to know if I can use something similar in C++.

Also, is it possible to use the decorator pattern for this?

EDIT: I would now consider other possibilities or approximations for this matter, ie. some way to attach additional behavior to a class in runtime.

EDIT 2: Java is not an option, because some devices I'd like to port it to don't support java.

0 投票
4 回答
2161 浏览

python - Google App Engine 中的 Python 函数装饰器

我在 Google 的 AppEngine 中使用 python 函数装饰器时遇到问题。我对装饰器不是很熟悉,但是当您可能希望在执行某些功能之前强制用户登录时,它们在 Web 编程中似乎很有用。

无论如何,我在这里使用了一个 flickr 登录示例,它使用 django 并装饰了一个需要 flickr 登录的函数。我似乎无法让这种类型的装饰器在 AppEngine 中工作。

我把它归结为:

此代码在命令行中运行,但是当我在 GoogleAppEngineLauncher (OS X) 中运行它时,我收到以下错误:

而且我不确定为什么...

编辑以包含实际代码:@asperous.us 我更改了 content() 的定义以包含可变参数,这是您的意思吗?@Alex Martelli,“打印”在 AppEngine 中确实有效,但仍然是一个完全公平的批评。就像我说的,我正在尝试使用上面链接中的 flickr 登录。我试着像这样把它放到我的应用程序中:

当我删除 @require_flickr_auth 装饰时,字符串 'Welcome ...' 打印出来就好了。否则我会得到一个丑陋的 AppEngine 异常页面

在底部。

0 投票
3 回答
238 浏览

python - 在可以访问(当前)类本身的类中创建装饰器

目前,我正在以这种方式进行操作:

如图所示,我需要能够在子类中执行此操作。问题是我似乎无法弄清楚如何使该decorated字段不在实例之间共享。现在我有一个骇人听闻的解决方案,最初将其设置为None,然后在装饰函数时检查它,但这仅适用于一种方式。换句话说,如果我子类化Eggs然后用Eggs.decorate函数装饰某些东西,它会影响所有子类。

我想我的问题是:是否有可能有在基类和子类之间不共享的可变类字段?

0 投票
5 回答
164 浏览

python - 在装饰器中定义函数

为什么这不起作用?我怎样才能让它工作?也就是说,我怎样才能让 gu 在我的装饰函数中访问?

我是否需要以某种方式将 gu 添加到已定义函数的字典中?或者我可以在调用它之前将 gu 添加到 f 的本地命名空间吗?

0 投票
10 回答
28917 浏览

python - 如何从 Python 中的函数中去除装饰器

假设我有以下内容:

我想测试该spam功能,而无需经历设置连接的麻烦(或装饰器正在做的任何事情)。

鉴于spam,我如何从中剥离装饰器并获得底层的“未装饰”功能?