python中为什么要使用魔法函数?怎么用?
视频链接https://zhuanlan.zhihu.com/p/562586782
什么是魔法函数?
是以双下划线开头和双下划线结尾命名的特殊函数,不需要开发者调用,由Python解释器调用。
可调用对象的概念:在python中,能够使用名称加()执行的对象都是可调用对象。
很显然所有的函数都是可调用对象,那么类实例对象是调用对象吗?
实验下:
报错了,错误信息提示Student对象不是一个可调用对象。
检测一个对象是否可调用还可以使用callable函数。
返回False,也说明了Student对象不是一个可调用对象。
那么这么才能拿让类实例对象变成可调用对象呢?
只要类实现了魔法函数__call__即可,我们试下。
很明显实现了__call__之后,Student对象变成了可调用对象;
其中__call__不需要要开发者来调用,它属于特殊函数,解释器会去调用的。
为什么要将了转化成可调用对象呢?哪些场景使用?
可调用对象,让类实例对象能够像函数一样接收参数,好处是更加简洁,不需要使用 对象.方法()。
使用场景:
1.在一些验证器中使用,举个例子:
import re
class PhoneValidator():
"""DEC:手机号格式合法验证器"""
def __call__(self, *args, **kwargs):
reg = "^1(3[0-9]|4[5,7]|5[0,1,2,3,5,6,7,8,9]|6[2,5,6,7]|7[0,1,7,8]|8[0-9]|9[1,8,9])d{8}#39;
phone = args[0]
if not re.match(reg, phone):
print("phone is validate.")
else:
print("phone is invalidate.")
phone_validator = PhoneValidator()
phone_validator("13735468254")
phone_validator("10735468254")
结果:
phone is invalidate.
phone is validate.
你可能会为那为什么不使用函数呢?类有更好的扩展性,你可能还需要做其他的事情呢?
所以我们需要的是函数但是又不仅仅只是函数。
2.在类装饰器中使用,在装饰器章节详细看下类装饰器。
"""
描述:虽然装饰器是用类实现的,但是最终用来替换原函数的对象,仍然是一个处在__call__方法里的闭包函数
"""
import time
import random
from functools import wraps
class Timer:
"""装饰器:打印函数的耗时
:param print_args:是否打印发发那个发名和参数,默认为False
"""
def __init__(self,print_args):
self.print_args = print_args
def __call__(self, func):
@wraps(func)
def decorated(*args, **kwargs):
"""
desc:jdhfksjdf
@param:args,
"""
st = time.perf_counter()
ret = func(*args, **kwargs)
if self.print_args:
print(f""{func.__name__}",args:{args},kwargs:{kwargs}")
print("time cost:{} seconds".format(time.perf_counter()-st))
return ret
return decorated
@Timer(print_args=True)
def random_sleep():
print("random")
if __name__ == "__main__":
random_sleep()
第五届安徽分布式光伏论坛将于月底举办!十四五以来,在碳达峰碳中和目标引领和全球清洁能源加速应用背景下,中国光伏产业总体实现高速增长,2022年光伏应用市场迅猛发展,110月光伏新增装机达到58。24GW,同比增长98。
安徽知名企业开课!企业上课都讲啥?2月7日上午,岸香国际控股集团组织开展股东团队新春第一课学习活动,深入学习安徽省新春第一会会议精神,持续深化开展反对两个主义去三化,全面提升工作效能。徽商杂志封面人物岸香国际控股集
跨界生殖医美光伏,麦迪科技又拟19亿加码光伏,此前屡次炒作套现记者尹靖霏编辑地方国资也炒作?市值仅有50亿元的麦迪科技宣布拟18。62亿元投建年产9GW单晶电池项目。有投资者对此无奈调侃反正都是ppt,就不能吹大点?看人明牌珠宝(002574
关注2023年度IPO核查八大涉税风险点!编者按在企业IPO过程中,税务问题一直都是证券监督管理委员会重点核查的内容之一,那么,在企业IPO过程中高频出现的税务风险有哪些?本文以2023年度证监会42份IPO反馈意见为样本
首席连线申万宏源许旖珊全面注册制改革有两大重头戏,打新不再是无风险套利近日,A股股票发行全面注册制改革正式启动!作为我国资本市场发展的牵牛鼻子工作,本次改革有哪些重头戏,会如何影响证券行业,又将带来哪些投资机会,市场万众瞩目。2月9日,申万宏源研究非
黄渤能否重回巅峰,导演乌尔善的这3部大片或成为关键恍惚间,我们熟知的喜剧演员黄渤渐渐成了演艺圈中的边缘人物,作品不出彩,人设不出彩,票房不大卖像去年的外太空的莫扎特票房只有2。23亿,被光抓走的人票房只有7098万,让人难以理解,
自由市场关闭!买断市场再起波澜!威少罗斯等人遭哄抢!热闹非凡的交易市场终于完美谢幕!今年的交易市场可谓近些年热闹,大牌球员纷纷换队,各路球队接连完成阵容升级独行侠在得到欧文之后实力暴增,一跃成为西部顶级豪强!梭哈杜兰特的太阳队更是成
巴克利太阳有4年的夺冠窗口艾顿将是球队成功的关键直播吧2月11日讯近日,NBA名宿巴克利在节目中谈到了老东家太阳队。巴克利表示太阳做了很棒的交易,首先,有时候你得到一个好球员,但他马上会成为自由球员。杜兰特至少还要打3年,布克处
活力湾区创业沃土上个月,璞钠能源携手超威集团面向全球正式发布钠离子新型电池,这也成为小动力行业最早把钠电池产品化的企业之一,核心科技引发全球关注。璞钠中试车间效果图。受访者供图(下同)抢占新赛道的
全球连线新年计划投下信任票法籍副总裁在中国,为世界他们,来自五湖四海说着不一样的语言却不约而同地爱上了这里对中国的未来充满信心岁末年初这些在华外企高管在自己的新年计划里畅想在第二故乡的美好生活笃定带领所在企业持续深耕中国尽全力提升
狂飙中可悲又可怜的几个角色狂飙剧中每个角色人物都刻画的淋漓尽致,随着大结局的落幕,相信大家也和我一样进入了二刷。看遍剧中的大小角色,这四个配角让我觉得可悲也可怜。白江波,京市最早一批的大佬,手里有地下赌场,
庾澄庆与47岁老婆腻歪依偎!女方戴大金链好贵气,一颦一笑似少女饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!11月19日,有台媒曝光歌手庾澄庆与老婆张嘉欣同框的照片,引发外界热议。照片中,61岁的庾澄庆穿着白色T恤,戴着红色棒球
将军丈夫膝下无子,妻子劝丈夫再娶,后来生下4个科学家孙立人的一生育有两子两女。这四个孩子的成就是显著的。后来都成为了有名的科学家。不过,孙立人的这四个孩子,并不是他的妻子张晶英所生。原来,张晶英无法生育,为了能让孙家有后,张晶英这才
空有凌云志却不识人,徽宗活该下场凄惨!(宋徽宗时代第2卷150)第二部时代拼图人人都想证明自己,帝王也不例外。所不同的是,普通人证明自己,以个人的人生为代价帝王证明自己,以整个王朝亿万生灵的人生为代价。这看上去很不公平,可这就是人类社会的本质。
小人得志莫猖狂谈古论今不荒唐,小人得志莫猖狂。善恶到头终有报,人间正道是沧桑。有君子的地方就有小人,有小人的地方就有江湖,君子是正义的化身,小人是邪恶的代表,正邪之争,善恶之别,虽说正义最终战胜
铁血贵州省长军阀出身的周西城你眼中的军阀是什么形象呢?是那种烧杀淫掠,无恶不作的,还是那种风度翩翩的影视剧中的形象。今天我们来说一下军阀出身的贵州省长周西城。年轻帅气的周西成周西城一九一一年参军,一九二六年被
互联网增长策略的底层逻辑有一个奇怪的现象。互联网公司极其重视战略定位,但很少使用定位理论。我们从来没有听到中国互联网前10名头部公司创始人,公开使用定位理论来介绍自己的公司。我是谁?消费理由?信任状?那互
密县供销社为何建社不到一年即开始整顿1951年下半年到1952年上半年,密县供销社进入了快速发展期,然而一年以后的1952年7月即进行了整顿,其中的原因是什么呢?1951年夏季,河南省合作社召开第一次社员代表会议,作
有把iPhone12mini当主力机的吗?12mini一出就买了,一直用到现在快两年了,从4S到5S,iphone6到12mini,中间也使用过华为mate10,mate20,但还是喜欢用小屏手机,钟爱小屏手机的完美掌控感
补肾固原的长寿穴涌泉(井穴)别名地冲穴义体内肾经的经水由此外涌而出。名解1)涌泉。涌,外涌而出也。泉,泉水也。涌泉名意指体内肾经的经水由此外涌而出体表。本穴为肾经经脉的第一穴,它联通肾经的体内体表
有高血压的人,需要控制心率吗,控制在多少比较好呢?有位患高血压的朋友问华子,他的心率每分钟80多次,是不是太快了,要不要控制一下?有什么方法可以控制,控制到什么程度比较好呢?华子说,有高血压的人应当关注自己的心率,如果心率超过每分
字节跳动上线番茄畅听音乐版,听歌可赚金币提现记者肖芳据界面新闻了解,字节跳动新上线一款音乐App番茄畅听音乐版,该App为番茄畅听的衍生版,主要聚焦音乐流媒体服务,而番茄畅听集合了音乐小说广播相声评书等多种流媒体服务。在产品