`

python 类装饰器的四种场景写法

阅读更多
总结: 1类装饰器用于类函数   __get__
      2.类装饰器用于普通函数, __call__
      3.e

import time


# 类装饰器用于类方法
class TimeitClass:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner):
        start_time = time.time()
        result = lambda *args, **kwargs: self.func(instance, *args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


class T:
    @TimeitClass
def t(self):
        print("hugo boss")


# T().t()
# 类装饰器用于普通方法
class Timeit:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        start_time = time.time()
        result = self.func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


@Timeit
def t2():
    print("t2")
# t2()
# 普通方法装饰器
def timeit(func):
    def _warp(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result
    return _warp


@timeit
def t3():
    print("t3")

    
class TestT3:
    @timeit
def t4(self):
        print("t4")

t3()
import time


# 类装饰器用于类方法
class TimeitClass:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner):
        start_time = time.time()
        result = lambda *args, **kwargs: self.func(instance, *args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


class T:
    @TimeitClass
def t(self):
        print("hugo boss")


# T().t()
# 类装饰器用于普通方法
class Timeit:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        start_time = time.time()
        result = self.func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


@Timeit
def t2():
    print("t2")
# t2()
# 普通方法装饰器
def timeit(func):
    def _warp(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result
    return _warp


@timeit
def t3():
    print("t3")

    
class TestT3:
    @timeit
def t4(self):
        print("t4")

t3()
import time


# 类装饰器用于类方法
class TimeitClass:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner):
        start_time = time.time()
        result = lambda *args, **kwargs: self.func(instance, *args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


class T:
    @TimeitClass
def t(self):
        print("hugo boss")


# T().t()
# 类装饰器用于普通方法
class Timeit:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        start_time = time.time()
        result = self.func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


@Timeit
def t2():
    print("t2")
# t2()
# 普通方法装饰器
def timeit(func):
    def _warp(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result
    return _warp


@timeit
def t3():
    print("t3")

    
class TestT3:
    @timeit
def t4(self):
        print("t4")

t3()
import time


# 类装饰器用于类方法
class TimeitClass:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner):
        start_time = time.time()
        result = lambda *args, **kwargs: self.func(instance, *args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


class T:
    @TimeitClass
def t(self):
        print("hugo boss")


# T().t()
# 类装饰器用于普通方法
class Timeit:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        start_time = time.time()
        result = self.func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result


@Timeit
def t2():
    print("t2")
# t2()
# 普通方法装饰器
def timeit(func):
    def _warp(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        elastic_time = time.time() - start_time
        print(elastic_time)
        return result
    return _warp


@timeit
def t3():
    print("t3")

    
class TestT3:
    @timeit
def t4(self):
        print("t4")

t3()

 

分享到:
评论

相关推荐

    深入理解Python装饰器

    通过本文的学习,我们深入了解了Python装饰器的基本概念、应用场景及其在不同版本中的发展。装饰器是一种非常强大的工具,能够帮助开发者以一种优雅的方式对函数进行增强或修改,极大地提高了代码的可读性和可维护性...

    Python抽象类的新写法

    自Python 2.7起,`abc`模块被引入,它提供了`ABCMeta`元类和`abstractmethod`装饰器,使得创建抽象类更加规范。下面是如何使用`abc`模块创建抽象类的示例: ```python from abc import ABCMeta, abstractmethod ...

    使用python装饰器计算函数运行时间的实例

    在Python中,装饰器是一种强大的功能,它允许程序员在不修改函数或方法的代码本身的情况下,向其添加新的功能。装饰器通常用于在运行时增加函数的额外功能,比如权限检查、日志记录、性能监控等。本次讨论的实例就是...

    简单了解python单例模式的几种写法

    本文将详细介绍Python中实现单例模式的三种方法:使用装饰器、使用基类以及使用元类,并通过示例代码帮助读者更好地理解和应用这些技术。 #### 二、单例模式简介 单例模式的主要目的是确保一个类只有一个实例,并...

    Python进阶

    装饰器(Decorators)是Python中一个强大且独特的功能,它允许开发者在不修改原函数定义的基础上给函数添加额外的功能。装饰器本质上是一个接收函数作为参数并返回一个新函数的函数。它在授权、日志记录、性能测试等...

    Python闭包与装饰器原理及实例解析

    Python中的闭包和装饰器是两种非常重要的编程概念,它们都是基于函数的特性来实现的。下面我们将深入探讨这两种技术的原理以及它们的实际应用。 **一、闭包** 闭包是指一个函数能够记住它被创建时的环境,即使这个...

    经典Python面试题之Python基础篇.docx

    - **IronPython**: 运行于 .NET 平台的 Python 解释器。 - **PyPy**: 基于 JIT 技术的 Python 解释器,提高了执行效率。 #### 6. 位和字节的关系? - **位**: 计算机中最小的数据单位,只有 0 或 1 两种状态。 - *...

    beginning python

    - 装饰器的作用:修改或增强函数或类的行为。 - 装饰器的定义与使用方法。 - 示例:日志记录装饰器。 3. **上下文管理器:** - 上下文管理器的定义与实现。 - `with`语句的使用。 - 示例:文件自动关闭。 4....

    python官方3.2.3.amd64版本msi安装包

    3. **内置函数和模块更新**:Python 3.2增加了`@staticmethod`和`@classmethod`装饰器,使得类方法的定义更为直观。同时,`__future__`模块提供了向后兼容的功能,允许开发者在Python 3.x代码中使用某些Python 2.x...

    Advanced-Python

    4. **装饰器(Decorator)**:装饰器是一种特殊类型的函数,可以修改其他函数的功能或行为,而不改变其原始代码。常见的装饰器有`@staticmethod`、`@classmethod`、`@property`以及自定义装饰器,它们常用于日志记录...

    深入理解Django-Signals信号量

    2. 使用装饰器`receiver`:这是一种更简洁的写法,`receiver`装饰器可以同时处理多个信号。例如: ```python from django.dispatch import receiver @receiver(signals.request_started) def close_old_...

Global site tag (gtag.js) - Google Analytics