在类中定义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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,...
    chen_000阅读 1,398评论 0 3
  • 装饰是为函数和类指定管理代码的一种方式.装饰器本身的形式是处理其他的可调用对象的可调用的对象。 函数装饰器在函数定...
    低吟浅唱1990阅读 274评论 0 0
  • 2017-4-29 今天晚上和班上的同学排练班级风采大赛的节目。七点左右,下起了小雨。雨越下越大,班上共四十多个人...
    瑶鬼阅读 245评论 0 0
  • 我把原文摘抄下来,再自己翻译了一遍。未加雕琢,不尽妥帖。 Dreamers Ezekiel Kwaymullina...
    脚丫和拳头麻麻阅读 270评论 0 1
  • 被咯苏州阅读 120评论 0 0

友情链接更多精彩内容