【Python】decorator

2019-12-11  本文已影响0人  乞力马扎罗的雪人

decorator @

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,使代码更具可读性。

def decorator(fun(parameter)):
    def inner_function(parameter):
        return output
    return inner_function
   
@decorator
def dec_function(parameter):
# 调用decorator函数,传入参数为被装饰函数dec_function
# 相当于执行decorator(dec_function)

注:

Python的一些内置装饰器如 :

@property :

属性装饰器,用在类定义中,把属性编程方法。

# 直接调用属性(可以随便改而无法检查)
s.score=9999
# 写方法(比较复杂)
class s:
    def get_score(self):
        
s.get_score=99
#@property
class s(object):
    @property
    def score(self):
        return self.score
    
    @score.setting
    def score(self,value):
        ...

@Classmethod

当用此装饰器定义方法时,将类而不是类的实例作为第一个参数,这意味着可以在此方法中直接使用类的属性,而不是特定的实例的属性。静态方法就是普通的函数(只是出现在类体中)。

普通类函数只能通过实例化对象来调用,而多个工具用到同一套函数时很麻烦,因此,再定义函数前加上装饰器@classmethod可以直接以classname.function()调用。

class A(object):
    name='a'
    @classmethod
    def a(cls):
        print(cls.name)
    # 

    @staticmethod
    def b():
        print('b')
    # 无需参数
     

调用类的实例方法,

  1、无参数时,如果没有直接实例该类,必须加:self;

        或者在调用方法时,提前定义这个类的实例,才能直接调用该类的实例方法。

  2、有参数时,也要加self,必须加后面的参数。

调用类的静态方法,不用加self,跟据参数匹配进行调用。

调用类的类方法时,根据参数匹配即可。

上一篇 下一篇

猜你喜欢

热点阅读