#coding:utf-8
class Coordinate(object):
def __init__(self,x,y):
self.x = x
self.y = y
def __repr__(self):
return "Coord:"+str(self.__dict__)
def wrapper(func):
def checker(a, b): # 1
if a.x < 0 or a.y < 0:
a = Coordinate(a.x if a.x > 0 else 0, a.y if a.y > 0 else 0)
if b.x < 0 or b.y < 0:
b = Coordinate(b.x if b.x > 0 else 0, b.y if b.y > 0 else 0)
ret = func(a, b)
if ret.x < 0 or ret.y < 0:
ret = Coordinate(ret.x if ret.x > 0 else 0, ret.y if ret.y > 0 else 0)
return ret
return checker
@wrapper
def add(a, b):
return Coordinate(a.x + b.x, a.y + b.y)
@wrapper
def sub(a, b):
return Coordinate(a.x - b.x, a.y - b.y)
one = Coordinate(100, 200)
two = Coordinate(300, 200)
print add(one,two)
print sub(one,two)
def logger(func):
def inner(*args,**kwargs):
print "Arguments were:%s,%s" % (args,kwargs)
return func(*args,**kwargs)
#注意带*号,为什么?
return inner
@logger
def foo1(x, y=1):
return x*y
@logger
def foo2():
return 2
print foo1(5,4)
print foo1(1)
print foo2()
'''
1.装饰器函数必须以函数为参数
2.装饰器函数是嵌套函数
3.装饰器材函数返回嵌套函数
4.嵌套函数要返回参数函数运行结果
'''
Python装饰器
最新推荐文章于 2024-03-04 15:55:42 发布