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注释详解
Jun 01 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
python实现最长公共子序列
May 22 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
python django中8000端口被占用的解决
Dec 17 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Python递归函数特点及原理解析
Mar 04 Python
python中温度单位转换的实例方法
Dec 27 Python
python实现KNN近邻算法
Dec 30 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 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动态实现表格跨行跨列实现代码
2012/11/06 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
JS前端加密算法示例
2016/12/22 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
vue中监听返回键问题
2019/08/28 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python函数参数操作详解
2018/08/03 Python
浅谈python中get pass用法
2019/03/19 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python csv模块使用方法代码实例
2019/08/29 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
自荐书范文
2013/12/08 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
个人承诺书怎么写
2014/05/24 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
研究生简历自我评
2015/03/11 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python