python不同版本的_new_不同点总结


Posted in Python onDecember 09, 2020

我们都知道python的版本不同,在使用的时候就有所区别。鉴于我们推荐小伙伴们选择python3版本,所以这方面的区别了解的不是很多。就拿_new_来说,在python2和3中的写法是不一样的,之前有接触_new_的小伙伴想必没有注意到这个问题。接下来讲讲new的基本用法,然后就python不同版本中_new_的区别带来详解。

new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法。

class Person(object):
  """Silly Person"""
  def __new__(cls, name, age):
    print '__new__ called.'
    return super(Person, cls).__new__(cls, name, age)
  def __init__(self, name, age):
    print '__init__ called.'
    self.name = name
    self.age = age
  def __str__(self):
    return '<Person: %s(%s)>' % (self.name, self.age)
if __name__ == '__main__':
  piglei = Person('piglei', 24)
print piglei

Python3和 Python2中__new__使用不同

Python3的写法

class Singleton(object):
  def __new__(cls,*args, **kwargs):
    if not hasattr(cls,'_inst'):
      print(cls)
      cls._inst = super(Singleton, cls).__new__(cls)
    return cls._inst

如果Python3的写法跟Python2写法一样,那么倒数第二行会报错

"TypeError: object() takes no parameters"

根据上面的运行结果我们可以发现,在python3中强行使用python2的写法是不可行的。

Python __new__()知识点扩充

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

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

class demoClass:
  instances_created = 0
  def __new__(cls,*args,**kwargs):
    print("__new__():",cls,args,kwargs)
    instance = super().__new__(cls)
    instance.number = cls.instances_created
    cls.instances_created += 1
    return instance
  def __init__(self,attribute):
    print("__init__():",self,attribute)
    self.attribute = attribute
test1 = demoClass("abc")
test2 = demoClass("xyz")
print(test1.number,test1.instances_created)
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

到此这篇关于python不同版本的_new_不同点总结的文章就介绍到这了,更多相关python不同版本中的_new_有何不同内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用装饰器和元编程实现结构体类实例
Jan 28 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
python实现TF-IDF算法解析
Jan 02 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
python保存文件方法小结
Jul 27 Python
python 对key为时间的dict排序方法
Oct 17 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
详解Python 解压缩文件
Apr 09 Python
Django stark组件使用及原理详解
Aug 22 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
python中_del_还原数据的方法
Dec 09 #Python
call在Python中改进数列的实例讲解
Dec 09 #Python
python中的对数log函数表示及用法
Dec 09 #Python
如何利用python正则表达式匹配版本信息
Dec 09 #Python
python基于win32api实现键盘输入
Dec 09 #Python
用python实现一个简单的验证码
Dec 09 #Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 #Python
You might like
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
建立动态的WML站点(二)
2006/10/09 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
python求解水仙花数的方法
2015/05/11 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
python3注册全局热键的实现
2020/03/22 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
中国网上药店领导者:1药网
2017/02/16 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
优秀教师事迹简介
2014/02/02 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
社区活动总结
2015/02/04 职场文书
2015年计划生育责任书
2015/05/08 职场文书
边城读书笔记
2015/06/29 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书