python装饰器类-Python装饰器15-开始使用类作为装饰器
基于前面的使用函数作为装饰器的理解,将类作为装饰器时需要保证以下几点
类的实例是可调用的
类需要一个地方讲被装饰的函数传入到类的实例里
第一条可以通过__call__实现,第二条可以通过__init__实现。
手工将类作为装饰器使用
class Profiled:
def __init__(self, func):
# wraps(func)(self)
self.func = func
def __call__(self, *args, **kwargs):
print("call")
return self.func(*args, **kwargs)
def add(x, y):
return x + y
add = Profiled(add)
result = add(1, 2)
print(result)
执行结果:
call
3
似乎再用语法糖包装一下就可以实现将类作为装饰器来使用了。
使用类作为装饰器使用
from functools import wraps
class Profiled:
def __init__(self, func):
# wraps(func)(self)
self.func = func
def __call__(self, *args, **kwargs):
print("call")
return self.func(*args, **kwargs)
@Profiled
def add(x, y):
return x + y
result = add(1, 2)
print(result)
运行结果同上。
小结
这节我们以我们理解的方法实现了将类作为装饰器使用,看起来都很正确,似乎就是这样使用?但是这种方法还有一些别的问题,最重要的是同样的问题,可以在代码中使用:
print(add.__name__)
发现无法输出__name__,根据约定使用装饰器不能改变函数的__name__属性,因此我们还需要改进将类作为装饰器的使用方法。
python装饰器类-Python装饰器15-开始使用类作为装饰器相关推荐
- 面向对象类的使用(15)
本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题.此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将 ...
- python装饰器类-Python 装饰器、类装饰器、属性装饰器
今天来介绍一下python的装饰器. 1.首先来介绍一下简单的装饰器, def play(): return "i can play" if __name__ == '__main ...
- python装饰器类-Python 装饰器装饰类中的方法
title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...
- python装饰器类-PYTHON里的装饰器能装饰类吗
扩展回答 如何理解python里的装饰器 通常可以理解它是一个hook 的回调函数. 或者是理解成python 留给二次开发的一个内置API. 一般是用回调和hook 方式实现的. 如何理解Pytho ...
- python装饰器类-Python类装饰器
上次介绍了Python的函数装饰器,这次我们来讲一讲Python的类装饰器. Python的类装饰器基本语法如下: defdecorator(cls):print "6666666" ...
- python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...
介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. 1 #coding= ...
- python类装饰器应用_python之描述符应用与类的装饰器
一.描述符应用 1.1上下文管理协议 在上文中我们提到with语句中的上下文管理器.with语句可以如此简单但强大,主要依赖于上下文管理器.那么什么是上下文管理器?上下文管理器就是实现了上下文协议的类 ...
- python装饰器类-python装饰器2:类装饰器
本文是装饰器相关内容的第二篇,关于类装饰器. "类装饰器"有两种解读方式:用来装饰类的装饰器:类作为装饰器装饰其它东西.你如何认为取决于你,两种说法都有出现在其它的文章中.我的文章 ...
- python装饰器函数-Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
最新文章
- python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project
- 嵌入式Linux USB驱动开发之教你一步步编写USB驱动程序
- Angular双向数据绑定原理
- OO_Unit2_多线程电梯
- Noip2016day1 天天爱跑步running
- ubuntu 10.10下面添加samba实现和windows共享文件
- 用C#实现软件自动更新思路
- MFC模态对话与非模态对话框(二)
- WebRTC学习资料大全
- 机器学习 Machine Learning- 吴恩达Andrew Ng 第11~15课总结
- SQL Server 2014 安装与SQL语言学习笔记(一)
- 测试驱动开发心得体会
- Quartz 定时器 定时任务
- vegas视频软件使用教程和笔记
- 连上hdmi后没有声音。
- MT4 DDE数据交换
- oracle 视图的写法,Oracle视图基础详解与实例
- vue 环境配置.env;.env.development;.env.production配置
- PHP通过推广二维码追溯统计用户来源
- iQOONeo6SE和红米k40区别 哪个好 iQOONeo6SE和红米k40哪个值得买 两者配置对比
热门文章
- 使用UIScrollView 实现分页功能
- UML和模式应用学习笔记-1(面向对象分析和设计)
- 关于delphi中的register, pascal, cdecl, stdcall, safecall
- [转] Windows系统Net命令使用技巧
- JDBC—01—JDBC简介;JDBC常用接口与类;
- select选择框实现跳转
- spring mvc拦截器和mvc:annotation-driven /的详解
- Windows Phone + VB 程序员=好的移动应用程序
- 【11/11】模拟赛
- docker 删除默认连接_Net Core 中 Docker应用