具有参数的Python类修饰器,但未运行修饰的函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了具有参数的Python类修饰器,但未运行修饰的函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1358字,纯文字阅读大概需要2分钟。
内容图文
![具有参数的Python类修饰器,但未运行修饰的函数](/upload/InfoBanner/zyjiaocheng/678/acda5d09f75d41f09f05f018be419e87.jpg)
我已经大部分工作了.我想要一个类装饰器(Decorator类),该装饰器接受可用于将方法包装在对象(Person的实例)上的参数(问候和告别).
一切正常,除了…永远不会运行Person类上的原始命令功能!如果我使用类似的方法手动调用该函数
output = getattr(instance, func.func_name)(command, *args, **kwargs)
我得到无限递归.
我该怎么做呢?完整的代码如下:
import functools
class Decorator(object):
def __init__(self, greeting, farewell, *args, **kwargs):
print "initing"
self.greeting = greeting
self.farewell = farewell
def __call__(self, func, *args, **kwargs):
print "CALLING"
@functools.wraps(func)
def wrapper(instance, command, *args, **kwargs):
return "%s, %s! %s!\n%s, %s!" % (
self.greeting,
instance.name,
command,
self.farewell,
instance.name
)
return wrapper
class Person(object):
def __init__(self, name):
self.name = name
@Decorator("Hello", "Goodbye")
def command(self, data):
return data + "LIKE A BOSS"
s = Person("Bob")
print s.command("eat food")
实际输出:
initing
CALLING
Hello, Bob! eat food!
Goodbye, Bob!
预期产量:
initing
CALLING
Hello, Bob! eat food LIKE A BOSS!
Goodbye, Bob!
解决方法:
您从未调用func来获取原始消息:
def wrapper(instance, command, *args, **kwargs):
original_value = func(instance, command) #call func here
return "%s, %s! %s!\n%s, %s!" % (
self.greeting,
instance.name,
original_value,
self.farewell,
instance.name
)
输出:
initing
CALLING
Hello, Bob! eat food LIKE A BOSS!
Goodbye, Bob!
内容总结
以上是互联网集市为您收集整理的具有参数的Python类修饰器,但未运行修饰的函数全部内容,希望文章能够帮你解决具有参数的Python类修饰器,但未运行修饰的函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。