首页 > 编程语言 >Python在Class中实现装饰器

Python在Class中实现装饰器

时间:2022-10-14 16:25:13浏览次数:58  
标签:__ run 函数 Python 装饰 print Class def

函数装饰器

普通的装饰器较为简单,关键点只有两个,一个是闭包的概念,一个是函数作为参数进行传递,让我们先实现一个简单的装饰器。

def huat(f):
    def func():
        print("welcome to huat!")
        f()
    return func

@huat
def method():
    print("hello world!")
    
if __name__ == '__main__':
    # Huat().run()
    method()

执行结果如下

welcome to huat!
hello world!

这里的装饰器无需传递参数,将装饰器函数种的闭包函数func作为一个参数进行返回即可。

方法装饰器

方法装饰器的实现和普通装饰器类似,我们先看一个不传递参数的例子

import time


def printTime(f):
    def x(self, *args, **kwargs):
        print("%s" % time.strftime("%X"))
        f(self, *args, **kwargs)
        return None
    return x


class Huat:
    @printTime
    def run(self):
        print("this's run.")


if __name__ == '__main__':
    Huat().run()

运行结果

15:41:10
this's run.

这里需要注意的地方是,在装饰器函数种的闭包func中,需要接收一个参数slef,然后在外部返回这个闭包函数即可。

带参数的方法装饰器

先来看一下代码

import time


def app(method: str):

    print(f"调用了{method}方法")

    def inner(func):
        def in_inner(self):
            print("%s" % time.strftime("%X"))
            func(self)
            return None
        return in_inner
    return inner


class Huat:
    @app(method="get")
    def run(self):
        print("this's run.")


if __name__ == '__main__':
    Huat().run()

运行结果

调用了get方法
16:11:13
this's run.

在装饰器函数有参数的情况下,被修饰的函数通过装饰器函数的闭包参数进行传递了,所以在闭包中的inner函数可以接收到被修饰函数run,所以多嵌套了一层闭包函数才能进行正常的装饰操作。

标签:__,run,函数,Python,装饰,print,Class,def
From: https://www.cnblogs.com/huanghongzhe/p/16791932.html

相关文章

  • python:用backgroundRemover+imageMagick给人像照片更换背景色
    一,安装工具:1,安装backgroundremover:参考:https://www.cnblogs.com/architectforest/p/16790772.html2,安装imageMagick:参考:https://www.cnblogs.com/archit......
  • 解决/usr/bin/ld: 找不到 -lboost_python-py38
    编译caffe报错:CXXtools/convert_annoset.cppCXXtools/test_net.cppCXXtools/caffe.cppCXXtools/train_net.cppCXXtools/convert_imageset.cppCXXexamples/cpp_......
  • Python的re解析
    re模块re.findall(正则,字符串)返回包含所有符合要求的字符串的列表re.finditer(正则,字符串)返回包含所有符合要求字符串的迭代器(效率比列表高)re.search(正......
  • Python数据分析,办公自动化,数据选取
    一张表中通常会包含很多字段,造成数据冗余,在做数据分析时,我们仅需要提取数据分析所需要的字段,这里就需要用到数据选取的知识点。本文构建数据表做数据索引,然后对数据内容进行......
  • Python数据分析,办公自动化,数据拼接与连接
    日常数据分析中,需要将多个表进行合并,包括表的纵向拼接以及表的横向连接,将多个小表组合成为一张大表,使用的方法有Excel中的Vlookup函数法,SQL中UNION和JOIN的方法,以及Pandas模......
  • Python数据分析,办公自动化,数据分组与透视
    数据分组是对相同类别的数据进行汇总,而数据透视表是通过对行或列的不同组合对数据进行汇总,所使用的汇总方法有求和、计数、平均值、标准差等,本文使用Python对数据进行数据分......
  • Python数据分析,办公自动化,数据预处理
    数据分析时,首先应对数据进行清洗,这里将数据清洗分为重复值处理、缺失值处理、异常值处理三个部分,重复值处理可删除重复的字段,缺失值处理可以用线性插值、填充为0或用均值填......
  • Python实战—基于KNN算法尾鸢花数据集分类
    KNN模型理论K最近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中......
  • 使用Python同时读取和写入同一个文件
    前言在平时想要使用python修改文件部分内容的时候,常用的做法是使用open函数(默认模式为read)打开一个文件,然后关闭文件,然后再使用write模式去写入更新的内容,最后关闭。这......
  • Python实战—自行车租赁数据分析
    本节选取自行车的租赁数据,利用numpy、pandas、matplotlib三个库,数据清洗后,做数据分析,研究时间段与自行车租赁的关系。数据来源  本节以自行车的租赁数据为例,数据来源于网......