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中编写并发程序
Feb 27 Python
Python应用库大全总结
May 30 Python
Python实现的简单排列组合算法示例
Jul 04 Python
Python退火算法在高次方程的应用
Jul 26 Python
pyshp创建shp点文件的方法
Dec 31 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
Jun 03 Python
python单例模式的多种实现方法
Jul 26 Python
Python 依赖库太多了该如何管理
Nov 08 Python
详解Python中的分支和循环结构
Feb 11 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
python如何实现word批量转HTML
Sep 30 Python
Python面向对象之内置函数相关知识总结
Jun 24 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
easyui的tabs update正确用法分享
2014/03/21 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python list与NumPy array 区分详解
2019/11/06 Python
3种python调用其他脚本的方法
2020/01/06 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
迎国庆演讲稿
2014/09/15 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
安全生产学习心得体会
2016/01/18 职场文书
导游词之临安白水涧
2019/11/05 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
python 远程执行命令的详细代码
2022/02/15 Python