给类添加装饰器有多种方法:

1.可以在类中的某个方法上边直接@添加,这个粒度细.无需详细介绍

2.也可以在类中通过 decorators=[, ]的形式添加,这样的话,类中的所有方法都会被一次性加上装饰器,粒度粗:

列表中多个装饰器的话,装饰器的添加顺序: 
  列表中:    从前 -> 往后,对应:
  函数上边:   从下 -> 到上
下边以一个简单的flask项目为例演示一遍
# app.py内容

import time
from flask import Flask, views
from flask import render_template, redirect, request app = Flask(__name__) # 装饰器1
def print_time(func):
def inner(*args, **kwargs):
st = time.time()
ret = func(*args, **kwargs)
et = time.time()
print("use time: {}".format(et - st))
return ret return inner # 装饰器2
def say_hi(func):
def inner(*args, **kwargs):
print("第二层装饰器开始")
ret1 = func(*args, **kwargs)
et = time.time()
print("第二层装饰器结束")
return ret1 return inner class Login(views.MethodView):
# decorators = [print_time, say_hi]
# 顺序相当于:
# @say_hi
# @print_time
# 结果:
# 第二层装饰器开始
# use time: 0.005026817321777344
# 第二层装饰器结束 decorators = [say_hi, print_time]
# 顺序相当于:
# @print_time
# @say_hi
# 结果:
# 第二层装饰器开始
# 第二层装饰器结束
# use time: 0.006980419158935547 def get(self, *args, **kwargs):
return render_template("login.html") def post(self, *args, **kwargs):
print(
request.files) # ImmutableMultiDict([('myFile', <FileStorage: 'vim常用命令总结.md' ('application/octet-stream')>)])
print(request.files.get("myFile")) # < FileStorage: 'vim常用命令总结.md' ('application/octet-stream')>
my_file = request.files.get("myFile")
my_file.save(my_file.filename)
return "" app.add_url_rule("/login", view_func=Login.as_view(name="login")) if __name__ == '__main__':
app.run()
<!-- templates/login.html中内容 -->

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="username">
<input type="file" name="myFile">
<input type="submit" value="提交">
</form>
</body>
</html>

通过decorators = [,] 的形式给类中的所有方法添加装饰器的更多相关文章

  1. python 类中的某个函数作为装饰器

    在python的类中,制作一个装饰器的函数, class A: def wrapper(func): ###装饰器 def wrapped(self,*arg,**kwargs) ... return ...

  2. django class类即视图类添加装饰器的几种方法

    根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 第一种:定义函数装饰器,在函数,类中使用函 ...

  3. StringBuilder类中的重要方法

    下面的API注解包含了StringBuilder类中的重要方法 append(boolean b):将 boolean 参数的字符串表示形式追加到序列. append(char c):将 char 参 ...

  4. Effective Java 第三版——16.在公共类中使用访问方法而不是公共属性

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  5. 静态内部类定义在类中,任何方法外,用static定义

    静态内部类:(注意:前三种内部类与变量类似,所以可以对照参考变量) 静态内部类定义在类中,任何方法外,用static定义. 静态内部类只能访问外部类的静态成员. 生成(new)一个静态内部类不需要外部 ...

  6. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  7. 重写Object类中的equals方法

    Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类 public class Student { //姓名.学号.年纪 private S ...

  8. PHP通过反射方法调用执行类中的私有方法

    PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包 ...

  9. Java String类中的intern()方法

    今天在看一本书的时候注意到一个String的intern()方法,平常没用过,只是见过这个方法,也没去仔细看过这个方法.所以今天看了一下.个人觉得给String类中加入这个方法可能是为了提升一点点性能 ...

随机推荐

  1. Mono的CustomConditionAttribute使用

    1.Mono的CustomConditionAttribute使用有诸多的限制,没有在XML中定义来的灵活 2.CustomConditionAttribute定义的子类必须和ExtensionAtt ...

  2. SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数

    这几天写新项目遇到这个问题,看这位博主总结得不错,懒得写了,直接转!原文:http://blog.csdn.net/yixiaoping/article/details/45281721原文有些小错误 ...

  3. LINUX 安装扩展(笔记)

    1.下载扩展包: 网址:http://pecl.php.net/ 2.解压安装包. 3.进入解压好的安装包. 4.使用php中的phpize (扩展模块) 使其生成configure. 5../con ...

  4. python 模拟百度搜索

    import urllib.request def Url(url): flag = input("请输入要搜索的关键字:") headers_ = { "User-Ag ...

  5. java内存问题排查及分析

    最近了解了一下jdk对于jvm分析工具的使用,下面通过一个简单的列子介绍一下,以下内容部分来自其他帖子. 下面这段代码明显有问题(从网上抄的) import java.util.HashMap; im ...

  6. Python threading(多线程)

    threading模块在较低级别thread模块之上构建更高级别的线程接口. 一.threading模块定义了以下函数和对象: threading.active_count() 等同于threadin ...

  7. 【安全测试自学】初探web安全处测试(三)

    安全测试专家成长系列之-初探Web安全3.mp4 案例: 安全测试的前景: 总结讨论:

  8. [Unity优化]批处理01:Statistics窗口

    参考链接: https://docs.unity3d.com/Manual/RenderingStatistics.html unity版本:2018.3.8 新建一个场景,只保留Main Camer ...

  9. Disconnected from the target VM, address: '127.0.0.1:57178', transport: 'socket'

    idea 执行测试单元debug时控制台出现:Disconnected from the target VM, address: '127.0.0.1:57178', transport: 'sock ...

  10. Linux命令、脚本

    1.传文件 FTP/SFTP:ftp 用户名@远程ip SCP:注意ip后有个   : 本地文件发到远程 scp 本地文件 用户名@远程ip:远程路径   远程文件发到本地 scp 用户名@远程ip: ...