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调用并链接MATLAB脚本详解
Jul 05 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
Python2与Python3的区别点整理
Dec 12 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
python3跳出一个循环的实例操作
Aug 18 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
python 下划线的不同用法
Oct 24 Python
如何使用Pytorch搭建模型
Oct 26 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
python切片作为占位符使用实例讲解
Feb 17 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方法调用模式与函数调用模式简例
2011/09/20 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
用python制作个视频下载器
2021/02/01 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
2015年老干部工作总结
2015/04/23 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
V Rising 服务器搭建图文教程
2022/06/16 Servers
mysql sql常用语句大全
2022/06/21 MySQL
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技