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映射列表实例分析
Jan 26 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
python利用拉链法实现字典方法示例
Mar 25 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
对python中的xlsxwriter库简单分析
May 04 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
Django 内置权限扩展案例详解
Mar 04 Python
python实现批量文件重命名
Oct 31 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Python中的特殊方法以及应用详解
Sep 20 Python
python和opencv构建运动检测器的实现
Mar 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
PHP 单引号与双引号的区别
2009/11/24 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
php中in_array函数用法分析
2014/11/15 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
node.js中watch机制详解
2014/11/17 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
用python写asp详细讲解
2013/12/16 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
华润集团网上药店:健一网
2016/09/19 全球购物
中学家长会邀请函
2014/02/03 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
身边的榜样活动方案
2014/08/20 职场文书
婚礼答谢礼品
2015/01/20 职场文书
安装工程师岗位职责
2015/02/13 职场文书
2015年组织部工作总结
2015/04/03 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
app场景下uniapp的扫码记录
2022/07/23 Java/Android