首页 > 其他 > 详细

使用装饰器修改类定义

时间:2020-02-04 22:53:21      阅读:75      评论:0      收藏:0      [点我收藏+]

修改类定义可以通过单继承,多继承(mixin),以及元类等。其实,装饰器也可以修改类定义,并且和上述提到的方案相比,更简洁直观,性能也更强。
如下:

def log_getattribute(cls):
    # Get the original implementation
    orig_getattribute = cls.__getattribute__

    # Make a new definition
    def new_getattribute(self, name):
        print('getting', name)
        return orig_getattribute(self, name)

    # Attach to the class and return
    cls.__getattribute__ = new_getattribute
    return cls


@log_getattribute
class A:
    def __init__(self, x):
        self.x = x

    def spam(self):
        pass


>>> a = A(42)
>>> print(a.x)
getting x
42
>>> a.spam()
getting spam

使用装饰器修改类定义

原文:https://www.cnblogs.com/jeffrey-yang/p/12261568.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!