我想构造用作装饰器的类,并保留以下原则:
这是针对Django项目的,现在我正在处理的特定情况下,该方法需要2个装饰器,并显示为普通的python函数:
@AccessCheck
@AutoTemplate
def view(request, item_id) {}
@AutoTemplate更改了该函数,以使其不返回HttpResponse,而仅返回一个在上下文中使用的字典。使用RequestContext,并从方法名称和模块推断模板名称。
@AccessCheck基于item_id向用户添加其他检查。
我猜这只是使构造函数正确并复制适当的属性,但是这些是哪些属性?
以下装饰器将无法正常运行:
class NullDecl (object):
def __init__ (self, func):
self.func = func
def __call__ (self, * args):
return self.func (*args)
如以下代码所示:
@NullDecl
@NullDecl
def decorated():
pass
def pure():
pass
# results in set(['func_closure', 'func_dict', '__get__', 'func_name',
# 'func_defaults', '__name__', 'func_code', 'func_doc', 'func_globals'])
print set(dir(pure)) - set(dir(decorated));
此外,尝试添加“打印FUNC。 名称 在NullDecl构造函数,它会为第一个装饰工作,而不是第二个” -正如名字将会丢失。
改进了 eduffy 的答案,它似乎工作得很好:
class NullDecl (object):
def __init__ (self, func):
self.func = func
for n in set(dir(func)) - set(dir(self)):
setattr(self, n, getattr(func, n))
def __call__ (self, * args):
return self.func (*args)
def __repr__(self):
return self.func
什么都不做的装饰器类如下所示:
class NullDecl (object):
def __init__ (self, func):
self.func = func
for name in set(dir(func)) - set(dir(self)):
setattr(self, name, getattr(func, name))
def __call__ (self, *args):
return self.func (*args)
然后您可以正常应用它:
@NullDecl
def myFunc (x,y,z):
return (x+y)/z
问题内容: 我正在尝试学习装饰器。我了解它的概念,现在尝试实现它。 这是我编写 的代码,代码不言自明。它只是检查参数是否传入。 抛出错误的说法。我了解它未在下定义,但不知道如何纠正此代码?我要去哪里错了? 问题答案: 您的装饰器应如下所示: 需要注意的几点: 期望将类作为第一个参数(您可以将其替换为简单的try / except TypeError除外)。 包装器应返回一个函数,而不是被调用函数的
本文向大家介绍python中的装饰器详解,包括了python中的装饰器详解的使用技巧和注意事项,需要的朋友参考一下 在了解装饰器的之前一定要先了解函数作为参数传递, 什么是函数内嵌,请参考我之前写的博客函数简介 因为在python里面,函数也是对象,也可以作为参数进行传递.python装饰器本质也是一种特殊函数,它接收的参数是函数对象,然后动态地函数参数添加额外的功能,而不用修改原有的函数对象.p
问题内容: 我正在尝试用python写一个弯曲的装饰器,我想我已经有了大致的想法,但是仍然有一些情况无法正常工作… 虽然在以下情况下可以正常工作: 对于以下情况,它将失败: 任何有关如何正确做到这一点的指针将不胜感激! 谢谢! 问题答案: 下面的实现是幼稚的,谷歌为“ currying python”提供了更准确的例子。
本文向大家介绍基于Python 装饰器装饰类中的方法实例,包括了基于Python 装饰器装饰类中的方法实例的使用技巧和注意事项,需要的朋友参考一下 title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] category: ['Python'] --- 目前在中文网
主要内容:带参数的函数装饰器,函数装饰器可以嵌套前面章节中,我们已经讲解了 Python 内置的 3 种函数装饰器,分别是 @staticmethod、@classmethod 和 @property,其中 staticmethod()、classmethod() 和 property() 都是 Python 的内置函数。 那么,函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: 实际上,上面
问题内容: 有没有办法像python风格那样装饰C ++中的函数或方法? 例如,使用宏: 要么 可能吗? 问题答案: 提供了我提出的解决方案的大多数构建块。 这是我建议的解决方案。 输出: ps 提供了一个可以进行功能调用以外的其他功能的地方。如果您想简单地传递至,可以使用: