当前位置: 首页 > news >正文

青岛最新疫苗接种青岛百度快速排名优化

青岛最新疫苗接种,青岛百度快速排名优化,有哪些网站做明星周边,优化视频__new__() 是一种负责创建类实例的静态方法,它无需使用 staticmethod 装饰器修饰,且该方法会优先 __init__() 初始化方法被调用。 一般情况下,覆写 __new__() 的实现将会使用合适的参数调用其超类的 super().__new__(),并在返回之…

__new__() 是一种负责创建类实例的静态方法,它无需使用 staticmethod 装饰器修饰,且该方法会优先 __init__() 初始化方法被调用。

一般情况下,覆写 __new__() 的实现将会使用合适的参数调用其超类的 super().__new__(),并在返回之前修改实例。例如:

 
  1. class demoClass:
  2. instances_created = 0
  3. def __new__(cls,*args,**kwargs):
  4. print("__new__():",cls,args,kwargs)
  5. instance = super().__new__(cls)
  6. instance.number = cls.instances_created
  7. cls.instances_created += 1
  8. return instance
  9. def __init__(self,attribute):
  10. print("__init__():",self,attribute)
  11. self.attribute = attribute
  12. test1 = demoClass("abc")
  13. test2 = demoClass("xyz")
  14. print(test1.number,test1.instances_created)
  15. print(test2.number,test2.instances_created)

输出结果为:

__new__(): <class '__main__.demoClass'> ('abc',) {}
__init__(): <__main__.demoClass object at 0x0000026FC0DF8080> abc
__new__(): <class '__main__.demoClass'> ('xyz',) {}
__init__(): <__main__.demoClass object at 0x0000026FC0DED358> xyz
0 2
1 2


__new__() 通常会返回该类的一个实例,但有时也可能会返回其他类的实例,如果发生了这种情况,则会跳过对 __init__() 方法的调用。而在某些情况下(比如需要修改不可变类实例(Python 的某些内置类型)的创建行为),利用这一点会事半功倍。比如:

 
  1. class nonZero(int):
  2. def __new__(cls,value):
  3. return super().__new__(cls,value) if value != 0 else None
  4. def __init__(self,skipped_value):
  5. #此例中会跳过此方法
  6. print("__init__()")
  7. super().__init__()
  8. print(type(nonZero(-12)))
  9. print(type(nonZero(0)))

运行结果为:

__init__()
<class '__main__.nonZero'>
<class 'NoneType'>


那么,什么情况下使用 __new__() 呢?答案很简单,在 __init__() 不够用的时候。

例如,前面例子中对 Python 不可变的内置类型(如 int、str、float 等)进行了子类化,这是因为一旦创建了这样不可变的对象实例,就无法在 __init__() 方法中对其进行修改。

有些读者可能会认为,__new__() 对执行重要的对象初始化很有用,如果用户忘记使用 super(),可能会漏掉这一初始化。虽然这听上去很合理,但有一个主要的缺点,即如果使用这样的方法,那么即便初始化过程已经是预期的行为,程序员明确跳过初始化步骤也会变得更加困难。不仅如此,它还破坏了“__init__() 中执行所有初始化工作”的潜规则。

注意,由于 __new__() 不限于返回同一个类的实例,所以很容易被滥用,不负责任地使用这种方法可能会对代码有害,所以要谨慎使用。一般来说,对于特定问题,最好搜索其他可用的解决方案,最好不要影响对象的创建过程,使其违背程序员的预期。比如说,前面提到的覆写不可变类型初始化的例子,完全可以用工厂​方法(一种设计模式)来替代​。

Python中大量使用 __new__() 方法且合理的,就是 MetaClass 元类。有关元类的介绍

http://www.mmbaike.com/news/108747.html

相关文章:

  • 本地的响应式网站建设酒店网络营销推广方式
  • 做网站应该会什么问题新闻摘抄四年级下册
  • 对政府网站建设 的建议外贸平台有哪些比较好
  • 大连网站推广怎么收费网络推广公司专业网络
  • 沙河市建设局网站刷移动端seo软件
  • 江门做网站seo的百度站长平台链接
  • 做网站英文编辑有前途吗网页设计培训学校
  • 模仿网站页面违法吗链接提取视频的网站
  • 网站制作产品资料专业的网络推广
  • 360怎么免费建网站如何推广自己的微信号
  • 汽车行业网站怎么做优化什么建立生育支持政策体系
  • 怎样做微信网站站长域名查询工具
  • 华为网站开发流程百度搜索引擎排名
  • 兰州网站建设与优化百度引擎
  • 江夏区做网站怎样建立一个网络销售平台
  • 公司网站建设济南兴田德润厉害吗百度搜索引擎排行榜
  • 雁塔区住房和城乡建设局网站seo有哪些作用
  • 垂直网站导航是谁做的独立站谷歌seo
  • b s架构的网站开发成都seo推广员
  • 网站大部分都是jsp做的免费长尾词挖掘工具
  • 网站建设亿码酷出名5长沙营销推广
  • 广告网站怎么做百度一下你就知道网页
  • 苹果手机如何做微电影网站高端建站
  • 一个专门做视频配音的网站网站怎么优化自己免费
  • 企业宣传型网站建设整合营销传播的方法包括
  • 佛山网站建设价格上海单个关键词优化
  • 铜山网站开发全世界足球排名国家
  • 超链接到网站怎么做视频文件下载深圳seo优化排名公司
  • 网站建设选青岛的公司好不好seo技术服务外包
  • 找设计方案的网站关键词优化外包服务