草庐IT

Decorator

全部标签

python - 方法重载装饰器

我正在尝试编写一个为python提供方法重载功能的装饰器,类似于PEP3124中提到的那个.我编写的装饰器非常适合常规函数,但我无法让它用于类中的方法。这是装饰器:classOverload(object):def__init__(self,default):self.default_function=defaultself.type_map={}self.pos=Nonedef__call__(self,*args,**kwargs):printselftry:ifself.posisNone:pos=kwargs.get("pos",0)else:pos=self.posprint

python - 如何区分装饰器中的方法和函数?

我想编写一个装饰器,根据它是应用于函数还是方法,其行为会有所不同。defsome_decorator(func):ifthe_magic_happens_here(func):#我尝试了inspect.ismethod()、inspect.ismethoddescriptor()和inspect.isfunction()但没有成功。问题是方法实际上既不是绑定(bind)方法也不是未绑定(bind)方法,而是一个普通函数,只要它是从类主体内部访问的。我真正想做的是将装饰器的操作延迟到类实际实例化的时间点,因为我需要这些方法在它们的实例范围内是可调用的。为此,我想用属性标记方法,然后在调用

python - 如何向 _not_ 继承的 python *class* 添加属性?

我需要能够在子类不可见的类(不是类的实例)上设置一个标志。问题是,这可能吗?如果可能,我该怎么做?为了说明,我想要这样的东西:classMaster(SomeOtherClass):__flag__=TrueclassChild(Master):pass...其中hasattr(Master,"__flag__")应该为Master返回True但False为child。这可能吗?如果是这样,如何?我不想在每个child中都将__flag__显式设置为false。我最初的想法是定义__metaclass__,但我没有那么多奢侈,因为Master继承自一些我无法控制的其他类和元类哪些是私有

python - Python 中的 []-esque 装饰器语法是什么意思?

这是TurboGears1.0.6中的一段代码:[dispatch.generic(MultiorderGenericFunction)]defrun_with_transaction(func,*args,**kw):pass我不知道在函数定义之前放置一个列表会如何影响它。在dispatch.generic的文档字符串中,它提到:NotethatwhenusingolderPythonversions,youmustuse'[dispatch.generic()]'insteadof'@dispatch.generic()'.好吧,这显然是一种在预装饰器版本的Python中获得类似装

python - Lua 支持装饰器吗?

我有Python背景,非常喜欢Python装饰器的强大功能。Lua支持装饰器吗?我已阅读以下链接,但我不清楚:http://lua-users.org/wiki/DecoratorsAndDocstrings更新如果可能的话,您是否也介意给出一个如何在Lua中实现它的示例。 最佳答案 在您引用的页面中记录的“装饰器”(例如在thisone中用于添加类型检查)与Python的奇怪命名的“装饰器语法”几乎没有关系,用于应用更高的特定方式orderfunction(HOF)——相反,Lua的wiki中描述和使用的装饰器是支持Decorat

python - 有没有办法进入装饰函数,跳过装饰器代码

我有一个模块,它使用自定义装饰器装饰一些关键函数。用pdb调试这些函数通常有点痛苦,因为每次我进入装饰函数时,我首先必须单步调试装饰器代码本身。我当然可以将调试器设置为在我感兴趣的函数内中断,但作为关键函数,它们会从许多地方多次调用,所以我通常更喜欢在函数外开始调试。我试着用代码来说明它,但我不知道这是否有帮助:defi_dont_care_about_this(fn):@functiontools.wraps(fn)defwrapper(*args,**kwargs):returnfn(*args,**kwargs)returnwrapper@i_dont_care_about_th

python - 装饰器模块 vs functools.wraps

decoratormodule的功能和functools.wraps密切相关。两者之间有什么区别(从Python3.3/3.4开始)?我知道一个区别:3+yearsago,decorator支持帮助,而wraps没有(参见this)。 最佳答案 您链接到的文档中列出了其中一个主要区别:decorator保留了包装函数的签名,而wraps则没有。 关于python-装饰器模块vsfunctools.wraps,我们在StackOverflow上找到一个类似的问题:

Flask 的 Python 装饰器

我需要为Flask路由函数添加一个python装饰器,(基本上我编辑了here中的代码)defrequires_admin(f):defwrapper(f):@wraps(f)defwrapped(*args,**kwargs):#ifnotadmin:#returnrender_template('error.html')returnf(*args,**kwargs)returnwrappedreturnwrapper然后像这样使用它就可以了:@app.route('/admin/action')@requires_admindefAdminAction():#NOerrorifNO

python - 如何装饰子类中的继承方法?

我不太确定如何在继承的方法上使用装饰器。通常装饰器放在定义之前,但对于继承的函数,定义在父类而不是子类中给出。我想避免重写子类中方法的定义,并简单地指定将装饰器放在继承的方法周围。为了让自己更清楚,这是我的意思的一个工作示例:classPerson():def__init__(self,age):self.age=age@classmethoddefgets_drink(cls,):print"it'stimetogetadrink!"return"Abeer"defdec(some_f):deflegal_issue(obj,):some_f(obj)return'ACoke'ret

python - 在 Django PermissionDenied 中发送自定义消息

每当不允许用户访问任何页面时,我正在使用django的PermissionDenied呈现403.html。有很多不同类型的页面,例如,产品页面,用户页面,用户联系信息,所有者信息。我想添加带有PermissionDenied的自定义消息,这将告诉用户他不能查看此页面的确切原因。我想将以下动态消息添加到403.html。Youhavearetryingto`ViewaProduct(id:3094384)`whilehavinga`Trail`account.Youarenotauthorizedtoviewthisproduct.和Youhavearetryingto`ViewaCu