Python进阶精华利用元类来控制实例的创建
意图:
想要改变实例创建的方式,以此来实现单例模式,缓存,或者其他类似的特征。
解决方法:
大家要知道的时,python创建实例的过程更像是调用函数。
如果想定制化这个过程,则需要借助元类的定义并且重新实现它的__call__()方法。如下有个例子:class NoInstance(type): def __call__(self, *args, **kwargs):#重新定义call方法 raise TypeError("This class can not instantiate directly!") class Spam(metaclass=NoInstance):#该类不可以创建对象 @staticmethod def grok(x): print("Spam.grok") Spam.grok(1) """ Spam.grok """ s = Spam() """ Traceback (most recent call last): File "F:/PycharmProjects/class_obj/class_one.py", line 1016, in s = Spam() File "F:/PycharmProjects/class_obj/class_one.py", line 1008, in __call__ raise TypeError("This class can not instantiate directly!") TypeError: This class can not instantiate directly! """
假如我们想要去创建单例模式(即一个类只能创建一个对象),使用如上方法就很直接了:class Single(type): def __init__(self,*args,**kwargs): self.__instance = None super(Single, self).__init__(*args,**kwargs) def __call__(self, *args, **kwargs): if self.__instance is None: self.__instance = super(Single, self).__call__(*args,**kwargs) return self.__instance else: return self.__instance class Spam(metaclass=Single): def __init__(self): print("Creating Spam") a = Spam() b = Spam() c = Spam() print(a is b)#True print(b is c)#True print(c is a)#True
电商取缔菜市场后会是什么后果?衣食住行是民生最基础的需求,年几十万亿的规模,让无数互联网企业前仆后继,哪怕是撞得头破血流也在所不惜,让资本市场为之疯狂,动辄几十亿几百亿砸进去,烧起来一点也不心疼,都是因为源于一
联想,你欠倪光南们的可不仅仅是这些最近看了张捷教授的视频,终于知道联想之所以能称为联想最根本的原因是什么没有倪光南院士和他的联想汉卡以及联想输入法,联想可能都不能称之为联想。在计算机引入中国的时候,它的输入与输出只
快手业务转型阵痛商务人员业绩不达标当月离职与隔壁长视频代表企业爱奇艺裁员2040的消息一起被市场关注的,还有短视频领域新晋巨头快手裁员的传闻,同样被互联网圈热议。一名快手的商务人员向第一财经记者确认了传闻的真实性(公司)北
物联网学习物联网如何为双十二买单?学到牛牛作者学到牛牛刚刚过去的双十二购物节又一次席卷了大家的钱包,当然也包括小编的。不知道有没有小伙伴和小编一样,忍过了双十一,但终究还是摆在了双十二的石榴裙下。以前的网络购物之后,我们收
某想和某为的恩怨司马喷某想对不对为何一桩旧案,会引发如此大的关注?原因之一,当然是5G标准的重要性。信道编码是5G通信标准中重要的组成部分之一,对于芯片复杂度,终端成本,功耗,以及专利费用都有很大影响。所以各个公
华为任正非的身价究竟有多高?其实任老一直在富豪榜上任正非的身价究竟有多高?任正非从2011年起就进入了福布斯中国富豪榜,当时他的排名是92位,之后他年年入选富豪榜,到了2018年,任正非的身价是205。6亿元,排名83位,名次还有
vivoOPPO华为的千元机值得买吗?值不值得买,要看需求。这几家的手机性价比不高,但是质量很稳。而且每款千元机还有各自的特点,比如大电池之类的。如果是线下机的话,还能讲讲价,售后也比较多,所以这个还是要看需求。这三个
机器人控制系统,都是采用哪家?国内有专门做机器人控制系统的企业吗?工业机器人控制系统是机器人的大脑。通俗的理解工业机器人控制系统就是一个可以解析运动算法的操作系统。在控制系统之上搭建各类应用,例如应用于焊接的焊接软件包,应用于码垛的码垛软件包,应
华为和联想的不同?联想和华为两种截然不同的发展路线,任正非华为30年坚持聚焦在主航道,抵制一切诱惑坚持不走捷径,拒绝机会主义,踏踏实实,长期投入,厚积薄发坚持以客户为中心,以奋斗者为本,坚持自我批判
一加8周年,首次面向用户推出盲盒产品可获得2022年新机等IT之家12月14日消息,一加方面今日宣布,为庆祝一加8周年特开启无畏无限线下活动,今日起至12月28日,用户可在线下收集盲盒,首个集齐的用户可获得2022年限定新机全家桶。除此之
名单超长!华为官宣提前完成既定产品HarmonyOS2正式版升级计划其实根据此前华为官方公布的数据来看,鸿蒙HarmonyOS2对于其既定计划更新产品的升级速度远比之前官方公布的更新计划要快的多。日前,华为官方也正式发布公告证实了这一推测。日前,华