python类call方法_python类装饰器即__call__方法

上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器

1.类中的__call__方法:

我们在定义好一个类后,实例化出一个对象,如果对这个对象以直接在后边加括号的方式进行调用,程序就会报错。也就是在类中这种做法是错误的;

而,如果一个类中写入了__call__方法,当我问在对实例对象以括号的方式进行调用时,__call__方法中的语句就会被执行,代码如下:

import time

# 定义一个Time类

class Time(object):

def __init__(self,a):

self.a = a

def __call__(self, *args, **kwargs):

print(self.a )

# 对类进行实例化

now = time.ctime()

c = Time(now)

# 调用类中的call方法

c()

# 结果为:Tue Jun 12 17:28:53 2018

2.类作为装饰器的底层原理和上一篇中所谈到的是一致的,以下边代码为示例:

# 定义一个Time类

class Time(object):

def __init__(self,func): # 注意这里要设定参数接收Test

self._func = func

def __call__(self):

print('我可以对函数进行装饰')

print("----------------------------")

self._func()

@Time # 等价于 Test = Time(Test)

def Test():

print('测试一下可不可以.')

Test()

#结果为:

#我可以对函数进行装饰

#----------------------------

#测试一下可不可以.

python 函数 装饰器的使用方法

一.装饰器  首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所以我们应该遵循开放封闭的原则. 也就是说:我们必须找到一种解决方案,能够在不修改一 ...

Python类总结-析构函数和__call__方法

class Foo: def __init__(self): pass #析构函数 def __del__(self): print('解释器要销毁我了,我要做最后一次呐喊') def __call_ ...

python 类装饰器

class Test(): def __init__(self, func): print('装饰器1') self.__func = func def __call__(self): print(' ...

类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

'''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...

python 描述符 上下文管理协议 类装饰器 property metaclass

1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分py ...

详解Python闭包,装饰器及类装饰器

在项目开发中,总会遇到在原代码的基础上添加额外的功能模块,原有的代码也许是很久以前所写,为了添加新功能的代码块,您一般还得重新熟悉源代码,稍微搞清楚一点它的逻辑,这无疑是一件特别头疼的事情.今天我们介 ...

python高级 之(二) --- 类装饰器

装饰器-初级 在不改变原有函数逻辑功能的基础上,为函数添加新的逻辑功能.使代码可读性更高.结构更加清晰.冗余度更低 简介 """ 闭包: 函数嵌套的格式就是闭包.写装饰器 ...

python 进阶篇 函数装饰器和类装饰器

函数装饰器 简单装饰器 def my_decorator(func): def wrapper(): print('wrapper of decorator') func() return wrapp ...

python 装饰器(七):装饰器实例(四)类装饰器装饰类以及类方法

类装饰器装饰类方法 不带参数 from functools import wraps import types class CatchException: def __init__(self,orig ...

随机推荐

nginx 反向代理 公用一个外网端口

服务器:ubuntu 配置nginx代理有2个文件,分别是sites-enabled 和sites-available. 路径都在/etc/nginx下,sites-enabled为sites-ava ...

ZOJ Problem Set - 1365 Mileage Bank

题目不难,主要说下这道题目在输入终止上的问题: 题目要求当输入为0时一次case结束,当输入为#时整个输入全部结束,可以用如下格式解决 while(scanf("%s",str)! ...

openstack快速封装镜像

本来是该写对接ceph的,但是临时有事了,必须先弄镜像,因此提前写这个了,我个人不是按官网来封装镜像的,是按自己的习惯,所以觉得信不过的可以用官网的方式,有兴趣的可以看看都知道,openstack创建 ...

boot from volume

nova boot --flavor 1 --block-device source=image,id=,dest=volume,size=5,shutdown=pre ...

清除浮动类的css

.clearfix:after{ content:; visibility:hidden; display:block; clear:both;} .clearfix{ zoom:;}

Client JQuery invoke NetSuite Suitelet

Please indicate the source if you need to repost. Client jQuery could initialize a cross-domain requ ...

python解析xml之lxml

虽然python解析xml的库很多,但是,由于lxml在底层是用C语言实现的,所以lxml在速度上有明显优势.除了速度上的优势,lxml在使用方面,易用性也非常好.这里将以下面的xml数据为例,介绍l ...

How do I list all tables/indices contained in an SQLite database

How do I list all tables/indices contained in an SQLite database If you are running the sqlite3 comm ...

java实现qq邮箱每天定时发送邮件

本周四的时候去学校的某机构值班,主要工作是帮老师送文件,干一些杂活.那天没有什么活儿,于是想起用Java实现发送邮件和接收邮件的功能.前几天接触过一点quartz框架,用来实现定时开始任务的功能.于是 ...

读取文件内容返回List<String>类型

文件内容格式: string1 string2 String 3 …… 很简单,两句话 String content = new String(Files.readAllBytes(Paths.get ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值