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 Trie树实现字典排序
Mar 28 Python
Python微信库:itchat的用法详解
Aug 14 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
python 定时修改数据库的示例代码
Apr 08 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python调用C语言的实现
Jul 26 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
解决reload(sys)后print失效的问题
Apr 25 Python
idea2020手动安装python插件的实现方法
Jul 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
php数组和链表的区别总结
2019/09/20 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python实现自动登录
2018/09/17 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
python如何删除列为空的行
2020/07/17 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
工作目标责任书
2014/07/23 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
2015年暑假工作总结
2015/07/13 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技