问题标签 [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.
python - 装饰器是装饰对象的属性?
我想创建一个装饰器,它允许我引用被装饰的对象并从中获取另一个装饰器,就像你可以在属性上使用 setter/deleter 一样:
具体来说,我希望它的行为与属性基本相同,但模拟一个序列而不是单个值。这是我第一次尝试它,但它似乎不起作用:
我很确定这c.__setitem__ = set
是错误的,但我不知道如何在那时获取对实例的引用。想法?
Alex Martelli 的解决方案适用于 2.6,但它在 2.4 和 2.5 上失败了(我希望它也适用于这些旧版本,尽管这不是绝对必要的):
2.4:
2.5:
2.6:
python - Python 装饰器应该多久使用一次?
我最近开始尝试使用 Python 装饰器(和高阶函数),因为看起来它们可能会使我的 Django 单元测试更加简洁。例如,而不是写:
我可以改为
然而,经过一些实验,我发现装饰器并不像我希望的那么简单。首先,我对在不同示例中发现的不同装饰器语法感到困惑,直到我了解到装饰器在接受参数时的行为非常不同。然后我尝试装饰一个方法,最终发现它不起作用,因为我首先必须通过添加一个将我的装饰器变成描述符__get__
方法。在整个过程中,我已经多次感到困惑,但仍然发现调试这个“装饰”的代码比通常的 Python 更复杂。我现在正在重新评估我的代码中是否真的需要装饰器,因为我最初的动机是节省一些打字,而不是因为有任何东西真正需要高阶函数。
所以我的问题是:应该自由使用装饰器还是谨慎使用?避免使用它们是否更像 Pythonic?
python - Python Decorator 3.0 和装饰器的参数
我很高兴看到最新版本的decorator
python 模块(3.0)。它看起来比以前的迭代更简洁(例如语法比以往任何时候都更甜美)。
然而,对于自己接受参数的装饰器,它似乎有糟糕的支持(例如,“酸”的语法,以可怕地延伸隐喻)。有没有人有一个很好的例子来说明你如何使用decorator
3.0 干净地做到这一点?
python - 装饰器标记一个方法执行不超过一次,即使被调用多次
我将直接上示例:
我试图定义execonce
但无法编写一个适用于方法的。
PS:我无法定义__init__
for中的代码必须在对象初始化后的某个initialize
时间调用。cf - cmdln 问题 13
python - 这些类型的 python 装饰器是如何编写的?
我想编写一个装饰器来限制函数可以执行的次数,遵循以下语法:
我认为可以编写这种类型的装饰器,但我不知道如何。我认为一个函数不会是这个装饰器的第一个参数,对吧?我想要一个“普通的装饰器”实现,而不是带有调用方法的类。
这样做的原因是要了解它们是如何编写的。请解释语法,以及该装饰器是如何工作的。
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.
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 异常页面
在底部。
python - 在可以访问(当前)类本身的类中创建装饰器
目前,我正在以这种方式进行操作:
如图所示,我需要能够在子类中执行此操作。问题是我似乎无法弄清楚如何使该decorated
字段不在实例之间共享。现在我有一个骇人听闻的解决方案,最初将其设置为None
,然后在装饰函数时检查它,但这仅适用于一种方式。换句话说,如果我子类化Eggs
然后用Eggs.decorate
函数装饰某些东西,它会影响所有子类。
我想我的问题是:是否有可能有在基类和子类之间不共享的可变类字段?
python - 在装饰器中定义函数
为什么这不起作用?我怎样才能让它工作?也就是说,我怎样才能让 gu 在我的装饰函数中访问?
我是否需要以某种方式将 gu 添加到已定义函数的字典中?或者我可以在调用它之前将 gu 添加到 f 的本地命名空间吗?
python - 如何从 Python 中的函数中去除装饰器
假设我有以下内容:
我想测试该spam
功能,而无需经历设置连接的麻烦(或装饰器正在做的任何事情)。
鉴于spam
,我如何从中剥离装饰器并获得底层的“未装饰”功能?