Python在类中定义Decorator装饰器

所需相关包。

import logging
from functools import partial, wraps

logging.basicConfig(level=logging.DEBUG)
  1. 类实例装饰器
class Obj(object):
    def instance_log_decorator(self, func=None, level=logging.DEBUG):
        if not func:
            return partial(self.instance_log_decorator, level=level)

        def wrapper(*args, **kwargs):
            log = logging.getLogger(func.__module__)
            log.log(level, ('execute %s!' % func.__name__))
            return func(*args, **kwargs)
        return wrapper

需要先创建实例。

o = Obj()
@o.instance_log_decorator
def plus(x, y):
    return x + y
  1. 类装饰器
class Obj(object):

    @classmethod
    def cls_log_decorator(cls, func=None, *, level=logging.WARNING):
        if not func:
            return partial(cls.cls_log_decorator, level=level)

        def wrapper(*args, **kwargs):
            log = logging.getLogger(func.__module__)
            log.log(level, ('execute %s!' % func.__name__))
            return func(*args, **kwargs)
        return wrapper

cls_log_decorator作为Obj的类方法直接使用。

@Obj.cls_log_decorator(level=logging.INFO)
def minus(x, y):
    return x - y
  1. @property
class Person(object):
    name = property()

    @name.getter
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        if not isinstance(value, str):
            raise TypeError('excepted string')
        self._name = value

各种不同的装饰器方法会在关联的property 实例上操作它的状态。因此,任何时候只要你碰到需要在装饰器中记录或绑定信息,那么这不失为一种可行方法。 from 《Python CookBook》9.8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值