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正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
python中mechanize库的简单使用示例
Jan 10 Python
总结Python中逻辑运算符的使用
May 13 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
python获取中文字符串长度的方法
Nov 14 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
python中def是做什么的
Jun 10 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Python机器学习之基础概述
May 19 Python
Python一行代码实现自动发邮件功能
May 30 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
ThinkPHP php 框架学习笔记
2009/10/30 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
JavaScript基本对象
2007/01/11 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
Vue父子之间值传递的实例教程
2020/07/02 Javascript
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
python实现五子棋小游戏
2020/03/25 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Django 实现图片上传和下载功能
2020/12/31 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
社区戒毒工作方案
2014/06/04 职场文书
小学生安全责任书
2014/07/25 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
培训感想范文
2015/08/07 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书