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中MYSQLdb出现乱码的解决方法
Oct 11 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
python实现连续图文识别
Dec 18 Python
python pandas库的安装和创建
Jan 10 Python
Python中itertools的用法详解
Feb 07 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
python函数指定默认值的实例讲解
Mar 29 Python
Python 绘制多因子柱状图
May 11 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
php获得文件扩展名三法
2006/11/25 PHP
php实现rc4加密算法代码
2012/04/25 PHP
php代码架构的八点注意事项
2016/01/25 PHP
php获取excel文件数据
2017/04/21 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
python 测试实现方法
2008/12/24 Python
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Python入门教程之if语句的用法
2015/05/14 Python
Python异常的检测和处理方法
2018/10/26 Python
python获取txt文件词向量过程详解
2019/07/05 Python
python实现的生成word文档功能示例
2019/08/23 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
一道SQL面试题
2012/12/31 面试题
计算机网络毕业生自荐信
2013/10/01 职场文书
中专毕业生自荐信
2013/11/16 职场文书
文明餐桌活动方案
2014/02/11 职场文书
理发店策划方案
2014/06/05 职场文书
市场调查策划方案
2014/06/10 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
mysql查询结果实现多列拼接查询
2022/04/03 MySQL