python修饰器怎样在类的层次中使用

ka-keung 发布于 2014/11/27 11:53
阅读 700
收藏 0

最近学习python,接触到修饰器,需求是这样的


        topleve    #所有的变量从这里获取(__init__方法获取)
             |
  -------------------
  |                    |               
 base              mysql   #这个层面定义一些函数
 |                     |
  --------------------
         |
        install #这里实例化toplevel,生成变量,然后调用上面的函数,继承toplevel的变量运行   




这里想利用修饰器,让install每次执行一个函数时,打印当前的时间,请问怎么实现?在哪个结构下实现 。    

                                

                                

加载中
0
_yjp
_yjp

图不是很明白。

python在类使用装饰器有很多方法,下面是其中一个简单点的:

# -*- coding:utf-8 -*-

import inspect
import time

def service_wrap(func):
    """
    对service func进行包装
    """
    def wrapped(*args, **kwargs):

        print(u' 时间: %s, <%s:%s>  [ 参数:<%s %s> ]' %
                          (time.time(),func.__module__, func.__name__, args, kwargs))
        try:
            ret = func(*args, **kwargs)
            return ret
        except Exception, e:
            #TODO
            raise e
    return wrapped


class BaseService(object):
    """
    所有的Service都从该类继承
    """

    def __getattribute__(self, name):
        value = object.__getattribute__(self, name)
        if inspect.ismethod(value):
            if str(name).startswith('__'): #过滤内置方法、属性
                return value
            return service_wrap(value)
        else:
            return value



k
ka-keung
稍后午休完尝试下,但是我的每个类都是在不同文件中通过import导入的,不知道会不会有问题。
返回顶部
顶部