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判断值是否在list或set中的性能对比分析
Apr 16 Python
Python自动化部署工具Fabric的简单上手指南
Apr 19 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
利用Python复制文件的9种方法总结
Sep 02 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Python2与Python3的区别点整理
Dec 12 Python
python 命名规范知识点汇总
Feb 14 Python
python主要用于哪些方向
Jul 05 Python
Django中和时区相关的安全问题详解
Oct 12 Python
python os.rename实例用法详解
Dec 06 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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 PDO中文乱码解决办法
2009/07/20 PHP
php使用codebase生成随机数
2014/03/25 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
Python中的choice()方法使用详解
2015/05/15 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
python 字典操作提取key,value的方法
2019/06/26 Python
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
新闻专业推荐信范文
2013/11/20 职场文书
运动会表扬稿大全
2014/01/16 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
教师节慰问信
2015/02/15 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫