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 Matplotlib库入门指南
May 18 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Python中的pack和unpack的使用
Mar 12 Python
使用matplotlib画散点图的方法
May 25 Python
Python函数返回不定数量的值方法
Jan 22 Python
详解python读取image
Apr 03 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
python数字类型math库原理解析
Mar 02 Python
Python爬虫HTPP请求方法有哪些
Jun 03 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
php修改文件上传限制方法汇总
2015/04/07 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
外企C语言笔试题
2013/11/10 面试题
腾讯公司的一个sql题
2013/01/22 面试题
园林施工员岗位职责
2013/12/11 职场文书
学术会议通知
2015/04/15 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers