修饰符必须出现在函数定义前一行,不允许和函数定义在同一行;
修饰符的内嵌函数的参数跟被修饰的函数参数相同,内嵌函数的返回值跟被修饰函数的定义表达式一样.
举个栗子理解一下:
def a(fuc):
print('x*y-x-y')
return fuc
@a
def b(x,y):
return x*y-x-y
print(b(3,4))
def a(func):
def inner(x,y):
print(x+y)
return func(x,y)
return inner
@a
def b(x,y):
pass
b(1,3)
python自带的三个装饰器
@property
将某函数,做为属性使用,加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。
class a:
def __init__(self,x,y):
self.x = x
self.y = y
@property
def get_x(self):
return self.x
def get_y(self):
return self.y
b = a(11,1)
print(b.get_x)
print(b.get_y())
@classmethod
修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
class a:
@classmethod
def get_x(cls,x,y):
return x+y
print(a.get_x(11,3))
@staticmethod
修饰类的方式
是把函数嵌入到类中的一种方式,函数就属于类,同时表明函数不需要访问这个类
使用修饰服,修饰方法,不需要实例化
class a:
@staticmethod
def get_x(x,y):
return x+y
print(a.get_x(11,3))