Python中的单例模式与反弹机制
一。单例模式
一般情况下,类可以生成任意个实例,而单例模式只生成一个实例
我们先用单例模式设计一个Rectangle类
然后用__new__方法设计单例模式,代码如下 class Rectangle: def __init__(self,length,width): self.length=length self.width=width def __new__(cls, *args, **kwargs):#__new__至少要有一个参数cls,代表要实例化的类 if not hasattr(cls,"obj"): #判断类当中有没有实例,如果没有则新建 cls.obj=object.__new__(cls) #生成实例对象 return cls.obj
然后我们来验证下,单例模式下是否只能生成一个实例rec1 = Rectangle(10,8)#判断类中没有实例,则新建实例rec1 print(rec1.length,rec1.width)#这时候我们打印下rec1这个长方形的长和宽 >>>10 8#是我们输入的值 rec2 = Rectangle(6,4) #Rectangle已经创建过rec1实例了,所以不会再生成新的实例,此时的rec1和rec2指向是同一个对象:Rectangle(6,4) print(rec1.length,rec1.width)#打印下rec1的长和宽 print(rec2.length,rec2.width)#打印下rec2的长和宽 >>> 6 4 6 4 print(id(rec1)==id(rec2)) >>>Ture #对象/实例只有一个,只是赋给了不同的变量名
单例模式在程序设计中比较典型的应用场景:多个用户同时调用某个模块时,会生成一些日志,我们希望这些日志存在同一个文件内,而不是多个文件。
在生成日志模块我们就可以采用单例模式进行设计。
二。反射
概念:简单来说就是可以利用字符串来映射模块中的相应方法然后可以操作模块中相应的方法
我们以一个饭店点菜的实际场景来理解Python的反射机制class Food_list:#创建一个饭店菜单的类 def yxrs(self): return "鱼香肉丝" def gbjd(self): return "宫保鸡丁" def hspg(self): return "红烧排骨"
hasatter
hasatter(对象,属性或方法名)
判断对象中是否有某个属性或某个方法,返回值是布尔型guke1 = Food_list()#实例化一个顾客对象 while True: diancai = input("请点菜: ") if hasattr(guke1,diancai):#判断顾客点的菜有没有 print("好的,马上去做") break else: print("这个没有,换个别的吧") >>>请点菜: 佛跳墙 >>>这个没有,换个别的吧 >>>请点菜: yxrs >>>好的,马上去做getattr
getattr(对象,属性或方法名,缺省值) 判断对象中是否有某个属性或某个方法,如果有返回方法本身,没有则返回缺省值guke1 = Food_list()#实例化一个顾客对象 def fun1():#定义一个方法,用作getattr的缺省值 return "没有这道菜" foodname = input("请输入要翻译的菜名:") a = getattr(guke1,foodname,fun1) #判断guke1中有没有foodname方法,有则返回这个方法,没有则返回fun1方法 print(a())#执行返回的方法 >>>请输入要翻译的菜名:yxrs#guke1中有yxrs方法,则返回这个方法 >>>鱼香肉丝 >>>请输入要翻译的菜名:dsfsfs#guke1中有没有dsfsfs方法,则返回fun1方法 >>>没有这道菜
setattr
setattr(对象,属性,新值)
将实例的属性改为新的值,如果属性不存在则新建
我们给实例guke1加个价格属性guke1 = Food_list()#实例化一个顾客对象 setattr(guke1,"proce","23元") print(guke1.proce) >>> 23元
卤素氙气LED各有什么优劣势?汽车大灯哪种好?卤素大灯特点便宜色温低穿透力强光线暗寿命短氙气大灯特点制造成本高色温高亮度高使用寿命长LED大灯特点制造成本更高色温高亮度高使用寿命超长三种灯源的特点如上所述,我们
手机一晚上都在充电,没拔充电器,还放在枕头边,有没有啥问题?随心所欲,想拔才拔出啥问题,就寻卖家。卖家不认,就换品牌如此操作,随便买啥。倒逼厂家,必需上佳如有怠慢,休怨买家!没有问题的,我多少年都是这样充电的木有问题。自从有手机充电每天如此
机械键盘到底有什么好?为什么那么多人喜欢机械键盘?个人感觉机械键盘按键感觉舒服,并且打游戏时间长了的话相比普通键盘不容易累我有台式机也有笔记本,我丝毫不觉得笔记本键盘有什么好,我也不觉得机械键盘有什么好,都一样,没区别。我不觉得机
华为和联想两家企业,对比来看如何评价?我找个,不同的比较方向一个是民族企业代表,一个是国有资产变外国企业的代表捂脸标题就是对华为最大的侮辱!一个是民族企业,一个是买办公司。一个科技公司,一个组装厂,怎么比!一个是高科技
企业文件防泄密,有什么好的方案分享吗?使用云桌面,然后外网权限进行管理,这样就无法获取。有详细需求可继续沟通。以上的问题通过安装iMonitorEAM软件可以解决。iMonitorEAM的文件防护分为三种方式1禁用US
互联网大佬谁编程排第一?周鸿祎我应该可以排到前三名10月24日是程序员节。在这一天,360集团创始人周鸿祎在社交平台发布动态为程序员点赞。周鸿祎表示,未来,世界是架构在软件之上,是数字化的世界,每一个程序员都承担着重要的使命,用技
2021。10。24区块链晚讯1。数据CME比特币期货未平仓量突破50亿美元。2。XRPL开发人员现可参与第二轮XRPL赠款。3。Solana链上追踪工具SonarWatch完成融资,SolanaCapital
有什么软件可以把照片变成手绘?当然,在开始之前我们需要一款美图秀秀图1这样一张具有艺术感的素描画只要三步就可以搞定了哦,跟着小编一起来吧1在美图秀秀软件下打开待处理的照片,进入美化菜单下,选择基础分类,点击锐化
比较好用的写作软件有哪些好的推荐?电脑比较好的写作软件其实很多,我觉得你问的应该是写作的应用吧,可以自动保存的那种。一般情况下,很多朋友喜欢在word上编辑好,然后一键复制到其他软件上面,节省时间,因为word上的
geekbech5性能测试欢迎评论补充geekbech5性能测试历代型号单核多核M1Max单核1745分,多核12422分(10核心,64GB内存)M1Pro单核1707分,多核11030分(10核心,32GB内存)M
查询苹果电脑保修提示购买日期未验证一直以来苹果的电脑,手机,单反,平板耳机等各种数码产品,一直因为其外观设计质量口碑等众多因素,深得人们的喜爱,这其中尤其体现在年轻人当中。人们愿意花更多的金钱来购买苹果的产品,甚至