python装饰器中的4种类型(函数装饰函数、函数装饰类、类装饰函数、类装饰类)

举报
python教程 发表于 2023/07/08 15:11:39 2023/07/08
【摘要】 1.函数装饰函数def wrapFun(func): def inner(a, b): print('function name:', func.__name__) r = func(a, b) return r return inner @wrapFundef myadd(a, b): return a + b print(my...

1.函数装饰函数

def wrapFun(func):
    def inner(a, b):
        print('function name:', func.__name__)
        r = func(a, b)
        return r
    return inner
 
@wrapFun
def myadd(a, b):
    return a + b
 
print(myadd(2, 3))

2.函数装饰类

def wrapClass(cls):
    def inner(a):
        print('class name:', cls.__name__)
        return cls(a)
    return inner
 
@wrapClass
class Foo():
    def __init__(self, a):
        self.a = a
 
    def fun(self):
        print('self.a =', self.a)
 
 
m = Foo('xiemanR')
m.fun()

3.类装饰函数

class ShowFunName():
    def __init__(self, func):
        self._func = func
 
    def __call__(self, a):
        print('function name:', self._func.__name__)
        return self._func(a)
 
 
@ShowFunName
def Bar(a):
    return a
 
print(Bar('xiemanR'))

4.类装饰类

class ShowClassName(object):
    def __init__(self, cls):
        self._cls = cls
 
    def __call__(self, a):
        print('class name:', self._cls.__name__)
        return self._cls(a)
 
#Python小白学习交流群:711312441 
@ShowClassName
class Foobar(object):
    def __init__(self, a):
        self.value = a
 
    def fun(self):
        print(self.value)
 
a = Foobar('xiemanR')
a.fun()
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。