【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)
注:
- inner_function:闭包函数
- 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,跟据参数匹配进行调用。
调用类的类方法时,根据参数匹配即可。