Python入门精华OOP委托者模式
什么是委托模式?
委托者模式是指将类的一些属性委托到内部持有的一个对象上,让其完成一些工作的模式。目的:
作为继承的替代方案或为了实现一种代理机制。继承替代的例子:class Gunner:#抢手为被委托方 ---类似父类 def dohomework(self,name): print(name,"(gunnner) is doing homework ...",sep="") def do_exam(self,name): print(name,"(gunnner) is examing...",sep="") class Student:#类似子类 def __init__(self,name): self._gunner = Gunner() self.name = name def do_homework(self):#雇佣抢手写作业 self._gunner.dohomework(self.name) def do_exam(self):#雇佣抢手考试 self._gunner.do_exam(self.name) def play(self): print("I`m playing basketball ...") 小白piao = Student("小白piao") 小白piao.do_exam() 小白piao.do_homework() 小白piao.play() print(小白piao.__dict__) #结果: """ 小白piao(gunnner) is examing... 小白piao(gunnner) is doing homework ... I`m playing basketball ... {"_gunner": <__main__.Gunner object at 0x0000025E35B03898>, "name": "小白piao"} Process finished with exit code 0 """
如果被委托方仅仅只有个别方法被委托,则上述例子足矣,但是如果需要被委托方帮委托方做所有被委托方做的事情的话:一种方法是在委托方类中写上所有的调用被委托方方法的方法。另外一种更加轻松的方式如下:class Gunner: def dohomework(self,name): print(name,"(gunnner) is doing homework ...",sep="") def do_exam(self,name): print(name,"(gunnner) is examing...",sep="") def play_soccer(self): print("playing ...") class Student: def __init__(self,name): self._gunner = Gunner() self.name = name def do_homework(self): self._gunner.dohomework(self.name) def do_exam(self): self._gunner.do_exam(self.name) def play(self): print("I`m playing basketball ...") def __getattr__(self, item): return getattr(self._gunner,item)#得到gunner中名字为item的属性 小白piao = Student("小白piao") 小白piao.play_soccer() 小白piao.do_exam()#这个方法是自己的,和抢手方法同名 小白piao.dohomework("抢手")#这个方法是抢手的 print(小白piao.__getattr__("do_exam")) #结果: """ playing ... 小白piao(gunnner) is examing... 抢手(gunnner) is doing homework ... > """ 代理模式例子:class Proxy: def __init__(self,obj): self._obj = obj def __getattr__(self, item): return getattr(self._obj,item) def __setattr__(self, key, value): if key.startswith("_"): super(Proxy, self).__setattr__(key,value) else: setattr(self._obj,key,value) def __delete__(self, instance): if instance.startswith("_"): super(Proxy, self).__delete__(instance) else: delattr(self._obj,instance) class Spam: def __init__(self,value): self.x = value def bar(self,value): print("bar spam:",self.x,value) s = Spam(3) p = Proxy(s) print(p.x)#3 p.bar(37)#bar spam: 3 37 p.x = 30 p.y = 28 print(s.y)#28
ETH全网算力显著上升导致日均收益明显下降矿工好日子快到了?今年以来,以ETH挖矿为代表的显卡挖矿导致许多显卡价格暴涨,现在的显卡价格基本上是以ETH挖矿算力来衡量,一般是每MHashs大约120140元人民币。以RTX3060Ti和RTX
光让HampampampM道歉是不够的,真正重要是另一件事今天有白话粉丝让我聊聊HM事件,可以,那就聊聊。这个事件呢,我就先说一个结论它并没有看起来的那么简单。因为这个事件就目前所呈现出来的事实链条,大致就是HM抵制用新疆棉花,理由是那边
罗技G29,带你体验类真实的赛车世界相信每个男孩心里都埋着一颗关于热血的种子,记得儿时,一部四驱赛车掀起了观看狂潮,四驱比赛的世界,充盈了我们的孩提时代。但并不是所有热爱赛车的人都能梦寐以求地成为赛车手,而现在,我们
罗技G29欧卡2体验之前和大家分享的都是赛车竞速类游戏,紧张的氛围和极限的速度能释放不少压力,但紧张刺激的游戏玩多了也会产生一定的视觉疲劳,所以这次为大家带来的是一款较为舒缓的游戏欧卡2。如尘埃成为赛
2020超全游戏耳机选购指南,总有一款适合你说起外设产品,大多数人首先想起的一定是键盘鼠标,的确,一款好的鼠标和键盘能为游戏中的表现增光添彩,但是耳机也同样重要,尤其是在守望先锋吃鸡等游戏中,强大的游戏耳机显得更为重要,能够
基于APP软件拓展优势,医疗心电仪更多采用工业安卓一体机医疗作为民生一大支柱产业,是社会稳定发展的决定性因素之一。发展至今,伴随科技信息化技术改进等产业发展,正赋能医疗行业逐步向智能化信息化大数据方向转变,智慧医疗成为当前国内的主要发展
春水堂创始人蔺德刚要做娃界小米近日,春水堂在在线上举行了一场双十一前的媒体沟通会,创始人春叔蔺德刚跟媒体朋友们分享了硅胶娃娃新升级的功能,以及即将开启的双十一活动。说到硅胶娃娃,很多人觉得这是个挺羞涩的话,实际
传统企业如何才能做好数字化转型?数字化已经悄悄地走进每个人的生活中,我们的衣食住行都离不开数字的应用,也因此,企业数字化的运营,成为企业增加订单,提升效率必不可少的工具。对于传统企业来说,数字化转型是吃力的。移动
当传统纺织业遇上智能制造,会擦出什么样的火花?纺织业作为工业领域市场化程度最高的产业,在十三五以后,国内纺织工业发展速度明显放缓,进入产业发展转折期,如何突破成为纺织制造企业关注的重点。而深受国家重点扶持的智能制造到来,无疑也
打破传统游戏手机的面具,红米RedmiK40游戏版正式发布我不喜欢游戏手机的原因并不是因为强大的性能,谁会拒绝性能呢?真正不喜欢的原因还是在设计上。现在市面上的游戏手机基本都是又厚又重,甚至有些游戏手机外观就和游戏机一样,如此还将日常手机
TOI图益国风舞狮233片儿童拼图评测娃特别喜欢玩拼图,所以儿童拼图桌游我买了比较多,例如ORCHARDTOYS,JUMBO,EDUCA等等,家里囤了好多种拼图。那些牌子的拼图多是外国图样,像TOI这种这种国风拼图他们