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通过floor函数舍弃小数位的方法
Mar 17 Python
python使用nntp读取新闻组内容的方法
May 08 Python
在Python中处理字符串之ljust()方法的使用简介
May 19 Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
详解Python locals()的陷阱
Mar 26 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
Django后台admin的使用详解
Jul 08 Python
django做form表单的数据验证过程详解
Jul 26 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
Aug 22 Python
Selenium 安装和简单使用的实现
Dec 04 Python
学点简单的Django之第一个Django程序的实现
Feb 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
PHP的历史和优缺点
2006/10/09 PHP
Cakephp 执行主要流程
2010/03/24 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
JS 建立对象的方法
2007/04/21 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
JavaScript模拟push
2016/03/06 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
python求素数示例分享
2014/02/16 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
医院护士的求职信
2014/01/03 职场文书
鸟的天堂导游词
2015/01/31 职场文书
立项申请报告范本
2015/05/15 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
python双向链表实例详解
2022/05/25 Python