Python装饰器

Posted 小乔的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python装饰器相关的知识,希望对你有一定的参考价值。

Python装饰器是一种语法糖,用于修改函数或类的行为,而无需修改其源代码。装饰器是一个可以接受函数或类作为参数,并返回一个新函数或类的函数。它可以用于添加功能,比如缓存、日志、计时等,或者改变函数或类的行为,比如限制访问、检查参数、实现单例等。

装饰器通常定义为一个函数,该函数接受一个函数作为参数,并返回一个新函数。在定义函数时,使用@符号并在其后面紧跟着装饰器名称,就可以将该装饰器应用于该函数。例如:

pythonCopy code
def my_decorator(func):
    def wrapper():
        print("Before the function is called.")
        func()
        print("After the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

在上面的示例中,my_decorator 是一个装饰器函数,它接受一个函数作为参数,并返回一个新函数 wrapper。在 wrapper 函数中,它打印了一些额外的信息,然后调用原始函数 func。最后,my_decorator 返回 wrapper 函数,这样就可以通过将 my_decorator 应用到函数 say_hello 上来修改 say_hello 函数的行为。

通过这种方式,Python装饰器可以提高代码的重用性和可维护性,并可以将关注点分离,使代码更加清晰和易于理解。

理解Python装饰器

python装饰器

装饰器是什么?我也不知道该如何给装饰器下定义。

1. 装饰器是函数,因为从代码的层面上来说,它就是开发人员定义的一个函数而已;
2. 装饰器就像是类的继承一样,通过装饰符,来实现函数与函数、函数与类之间的"继承"
3. 装饰器是种特殊的语法,通过 `@函数名` 或者 `@类名` 来实现函数或类的继承,但是
    装饰器不是继承,装饰器装饰的函数会被当做参数传递给装饰器,这个功能又好像
    C++中的虚函数,装饰器装饰的函数用来修改装饰器本身的功能来实现额外功能的添加。

示例:人与超人

前提:人 - 会走、会说话、会哭、会笑、会吃饭;超人 - 会走、会说、会哭、会笑、会吃饭、会飞

class man(object):
    def __init__(self, f):
        self.f = f
    def __call__(self):
        print("我会走路")
        print("我会说话")
        print("我会哭")
        print("我会笑")
        print("我会吃饭")
        self.f()

@man
def Super_man():
    print("我是超人,我会飞")

Super_man()

运行结果:

技术分享图片

个人看法

装饰器可以用来解决上述例子中的一类问题:功能不清楚且会增加。只要定义好装饰器,
可以很好的实现代码的复用提高代码的可读性。所以,想要对装饰器有更加深入的理解,
一定要多思考,把编程中遇到的可以用装饰器解决的问题给解决掉;另一点就是要多看
别人的代码,在别人的代码中找到一些不一样的用法,然后思考为什么那么用,如果合
理就借鉴别人的思路和方法。

Python装饰器的用语、细节

这部分内容在网上可以直接搜到,不进行记录,参考文章中提到的文章均有此模块的介绍

参考文章

如何理解Python装饰器? - 知乎
简单 12 步理解 Python 装饰器 - 伯乐在线
Python装饰器简介 - Bruce Eckel
带有参数的Python装饰器 - Bruce Eckel

以上是关于Python装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 装饰器:装饰器实例内置装饰器

python 装饰器:装饰器实例内置装饰器

python 装饰器:装饰器实例类装饰器(装饰函数)

python 装饰器:装饰器实例类装饰器(装饰函数)

理解Python装饰器

python高阶3 python装饰器