python什么是装饰器

1 python什么是装饰器

python装饰器本身是一个函数,它在不修改原函数或类的情况下,接受一个原函数或类作为参数,为原函数或类添加新逻辑,然后返回函数或类。是管理函数和类的一种方式。

此处原函数或类,为被修饰的函数或类,也称为主体函数或主体类。

函数装饰器

定义主体函数时进行名称重绑定,提供一个逻辑层来管理函数和方法,或随后对它们的调用。

在主体函数上一行,用@标注装饰器函数,自动调用装饰器函数,且将其返回值赋给主体函数。

用法

@f_decorator
def testfunc():pass

描述

@f_decorator:模块导入时,自动调用装饰器函数f_decorator;

testfunc:将装饰器函数返回值赋给被装饰函数testfunc变量;

示例

常规调用

>>> def f_decorator(func):
    print('装饰器函数被调用')
    return func

>>> def testfunc():
    print('testfunc主体函数被调用')

    
>>> fd=f_decorator(testfunc)
装饰器函数被调用
>>> fd()
testfunc主体函数被调用

函数装饰器调用

# ls.py
def f_decorator(func):
    print('装饰器函数被调用')
    def f_wrap():
        print('f_wrap装饰器返回函数被调用')
        func()
    return f_wrap
# @f_decorator 自动调用装饰器函数
# 将装饰器函数返回值赋给被装饰函数
@f_decorator
def testfunc():
    print('testfunc主体函数被调用')
print('调用装饰器返回的函数'.center(50,'='))
testfunc()

cmd执行结果

E:\documents\F盘>d:\python39\python.exe ls.py
装饰器函数被调用
====================调用装饰器返回的函数====================
f_wrap装饰器返回函数被调用
testfunc主体函数被调用

类装饰器

定义主体类时进行名称重绑定,提供一个逻辑层来管理类,或随后调用它们所创建的实例。

在主体类上一行,用@标注装饰器函数,自动调用装饰器函数,且将其返回值赋给主体类。

用法

@c_decorator
class TestCls:pass

描述

@c_decorator:模块导入时,自动调用装饰器函数c_decorator;

TestCls:将装饰器函数返回值赋给被装饰类TestCls变量;

示例

常规调用

>>> def c_decorator(cls):
    print('装饰器函数被调用')
    def c_wrap():
        print('c_wrap装饰器返回包装函数被调用')
        cls()
    return c_wrap

>>> class TestCls:
    def __init__(self):
        print('TestCls构造函数被调用')

        
>>> cd=c_decorator(TestCls)
装饰器函数被调用
>>> cd()
c_wrap装饰器返回包装函数被调用
TestCls构造函数被调用

函数装饰器调用

# ls.py
def c_decorator(cls):
    print('装饰器函数被调用')
    def c_wrap():
        print('c_wrap装饰器返回包装函数被调用')
        cls()
    return c_wrap

@c_decorator
class TestCls:
    def __init__(self):
        print('TestCls构造函数被调用')

print('调用装饰器返回的函数'.center(50,'='))
TestCls()

cmd执行结果

E:\documents\F盘>d:\python39\python.exe ls.py
装饰器函数被调用
====================调用装饰器返回的函数====================
c_wrap装饰器返回包装函数被调用
TestCls构造函数被调用

相关推荐

  1. python什么装饰

    2024-01-09 15:38:02       56 阅读
  2. python什么装饰

    2024-01-09 15:38:02       38 阅读
  3. python装饰的作用什么

    2024-01-09 15:38:02       27 阅读
  4. Python装饰

    2024-01-09 15:38:02       64 阅读
  5. Python装饰

    2024-01-09 15:38:02       63 阅读
  6. Python装饰

    2024-01-09 15:38:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-09 15:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-09 15:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-09 15:38:02       82 阅读
  4. Python语言-面向对象

    2024-01-09 15:38:02       91 阅读

热门阅读

  1. 从头开始构建大型语言模型

    2024-01-09 15:38:02       55 阅读
  2. C#轻量级日志功能(只有一个类)

    2024-01-09 15:38:02       57 阅读
  3. Docker实战

    2024-01-09 15:38:02       49 阅读
  4. 面试经典题---14.最长公共前缀

    2024-01-09 15:38:02       59 阅读
  5. KY132 xxx定律

    2024-01-09 15:38:02       57 阅读