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 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Python3中的json模块使用详解
May 05 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
python hook监听事件详解
Oct 25 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Python整数对象实现原理详解
Jul 01 Python
python保留小数位的三种实现方法
Jan 07 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Pygame Event事件模块的详细示例
Nov 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 JSON格式数据交互实例代码详解
2011/01/13 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
初学Javascript的一些总结
2008/11/03 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
python脚本设置超时机制系统时间的方法
2016/02/21 Python
python 动态加载的实现方法
2017/12/22 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python @property原理解析和用法实例
2020/02/11 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
Python wordcloud库安装方法总结
2020/12/31 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
工作的心得体会
2013/12/31 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书