优草派  >   Python

Python中的装饰器可以分为哪些类型?详解Python中各种类型装饰器

翟嘉慧            来源:优草派

Python中的装饰器就是一种可以装饰其它对象的工具,这个工具就是像是一个可调用的对象所以装饰器一般可以由函数、类来实现,下面通过具体的介绍,讲解一下Python中各种类型装饰器,有需要的朋友可以参考一下。

Python中的装饰器可以分为哪些类型?详解Python中各种类型装饰器

一、装饰器

在Python中,我们可以将装饰器当成是一种修饰工具,这个工具是可以接受一个对象作为参数的,此对象可以被修饰,可以是一个函数、方法或者是一个类等等,在装饰器中可以接受返回值。

二、装饰器的分类

1、简单的装饰器

def decorator(obj):
    return obj

简单的装饰器是不需要进行任何修饰的,并且它没有如何的用处,可以让代码通过不同的方式达到不同的效果,例如下面两个实例的对比:

@decorator    # 等价于 foo = decorator(foo)
def foo():    
    print('hello Python!')
foo()    # => hello Python!

在这段代码中,是使用了装饰器的,下面的这种方式也能实现不一样的的效果,代码如下:

def foo():
    print('hello Python!') 
foo = decorator(foo)
foo()    # => hello Python!

以上两个实例就是使用了最简单的代码,实现了装饰器不同的功能,在代码中,装饰器就可以接受一个函数,并且返回余光可调用的对象。

2、用于修改对象的装饰器

前面理解了装饰器的基本含义之后,就可以对装饰器添加一些功能用来修饰,代码如下:

def decorator(obj):
    obj.name = 'python'
    return obj

这个示例是以第一种方式中代码的基础上,加以修饰的,在这里只添加了一行代码,但是却有一定的实际意义了。它可以实现的功能就是给被装饰的对象,添加一个name属性,并且还赋予了值为python,使用效果如下:

@decorator        # => Bar = decorator(Bar)
class Bar(object):
    def __init__(self):
        pass
print(Bar.name)     # => python

在使用的时候,还可以给其他的对象添加属性值。

3、用于模拟对象的装饰器

在第二种类型的装饰器中,是直接对传入的对象进行了改变,在平时的使用中,最常见的方式是对一个对象进行模拟的传入,最后返回一个和原对象相似的对象模拟的对象对原来的对象进行了包装的,具体代码如下:

def outer(func):         # 函数装饰器
    def hheer():
        func()
    return hheer

在这段代码中,是一个函数装饰器,主要实现的功能就是对一个hheer函数进行修饰。因为它返回了一个模拟func对象的hheer对象。而这里hheer对象是一个函数,所以这个装饰器只能装饰函数。

关于Python中的装饰器可以分为哪些类型?详解Python中各种类型装饰器的文章就分享到这里了,文章中一共介绍了三种不同类型的装饰器,希望对大家的学习能够带来帮助。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行