使用Python的元类实现AOP监控类方法调用过程

引言

Python的元类(metaclass)功能强大,能够实现AOP(Aspect-Oriented Programming,面向切面编程)的类似功能,本文以实现监控类方法执行所耗时间为例,参照本文,可以实现记录类方法调用参数和执行结果到日志文件中,统一增加类的方法或属性等看似“不可能”的事情而不用对其它类做修改,达到“高内聚,低耦合”的目的。


什么是元类(metaclass)

简而言之,元类就是类的类(The class of a class)。有点拗口和抽象啊,呵呵,不过该定义非常恰当啊。定义类会创建一个类名称,一个类的字典,一个基类列表。元类就是负责利用这三个参数和创建类。大部分面向对象编程(OOP)的语言提供一个缺省实现,而Python的特殊之处在于,我们可以创建定制的元类。大部分Python程序员都不会用到元类这一工具,但是当我们的需求出现时,元类能够提供一个强大和优雅的解决方案。它已经使用在记录属性访问,增加线程安全,跟踪对象创建,实现单例(Singleton)和许多其他任务。


定制类的创建原理

缺省情况下,新型的类构造使用 type(), 一个类的定义被读入一个不同的名字空间,类名称的值绑定到 type(name,bases,dict)的结果上。当类的定义被读入时,如果 __metaclass__定义了,赋值给它的可调用对象将取代type()而被调用,这将允许所写的类或函数能够监控或者修改类的创建过程:

1.在类被创建之前修改类的字典。

2.返回另外一个类的实例--本质上扮演了工厂函数的角色。

这些步骤必须在元类的__new__()方法中完成, 然后 type.__new__() 将会通过该方法被调用,从而创建一个具有不同特性的类。

决定使用哪个合适的元类,依据以下优先规则:

1. 如果 dict['__metaclass__'] 存

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值