- # -*- coding:utf-8 -*-
- from functools import wraps
- #class A(object):
- #
- # def __init__(self, cls=None):
- # self.cls = cls
- #
- # def __call__(self, func):
- # @wraps(func)
- # def simulate_func(x, y):
- # if y == 0:
- # self.cls().print_error()
- # else:
- # func(x, y)
- # return simulate_func
- def A(cls):
- def wraps_cls(func):
- @wraps(func)
- def wraps_func(x, y):
- if y == 0:
- cls().print_error()
- else:
- func(x, y)
- return wraps_func
- return wraps_cls
- class B(object):
- def print_error(self):
- print ' ZeroDivision '
- class C(object):
- def print_error(self):
- print ' too large '
- @A(B)
- def printb(x, y):
- print x / y
- @A(C)
- def printc(x, y):
- print x / y
- printb(3, 0)
- print printb
- printc(3, 0)
- print printc
- #该片段来自于http://www.codesnippet.cn/detail/030920135568.html
来源: http://www.codesnippet.cn/detail/030920135568.html