python不同版本的_new_不同点总结

 更新时间:2020年12月09日 15:10:08   作者:小妮浅浅  
在本篇内容里小编给大家整理了一篇关于python不同版本的_new_不同点总结内容,有兴趣的朋友们可以学习下。

我们都知道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模拟练习题总结(附答案)

    这篇文章主要给大家介绍了关于python模拟练习题的相关资料,文中涉及质因数分解、开根变换、立方体拼接、日期计算、按位异或、停车场收费、整数操作、减法运算、相邻数之和、以及最长勾子序列的寻找,每题都有具体的输入输出示例和代码计算过程,需要的朋友可以参考下
    2024-11-11
  • 分享unittest单元测试框架中几种常用的用例加载方法

    分享unittest单元测试框架中几种常用的用例加载方法

    这篇文章主要介绍了unittest单元测试框架中常用的几种用例加载方法,帮助大家更好的理解和使用python的unittest测试模块,感兴趣的朋友可以了解下
    2020-12-12
  • Python模拟脉冲星伪信号频率实例代码

    Python模拟脉冲星伪信号频率实例代码

    这篇文章主要介绍了Python模拟脉冲星伪信号频率实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python numpy  数组的向量化运算操作方法

    Python numpy  数组的向量化运算操作方法

    这篇文章主要介绍了Python numpy数组的向量化运算操作方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Python实现带下标索引的遍历操作示例

    Python实现带下标索引的遍历操作示例

    这篇文章主要介绍了Python实现带下标索引的遍历操作,结合具体实例形式分析了2种带索引的遍历操作实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-05-05
  • python学习将数据写入文件并保存方法

    python学习将数据写入文件并保存方法

    在本篇文章里小编给大家分享的是关于python将数据写入文件并保存的实例内容,需要的朋友们可以学习下。
    2020-06-06
  • 浅谈Python任务自动化工具Tox基本用法

    浅谈Python任务自动化工具Tox基本用法

    这篇文章主要介绍了浅谈Python任务自动化工具Tox,tox 是一个管理测试虚拟环境的命令行工具, 它已存在多年且广被开发者们使用,对Python任务自动化工具Tox基本用法感兴趣的朋友一起看看吧
    2022-06-06
  • Python内建函数之raw_input()与input()代码解析

    Python内建函数之raw_input()与input()代码解析

    这篇文章主要介绍了Python内建函数之raw_input()与input()代码解析,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Python2.6版本pip安装步骤解析

    Python2.6版本pip安装步骤解析

    这篇文章主要介绍了Python2.6版本pip安装步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 一文详解Python中哈希表的使用

    一文详解Python中哈希表的使用

    哈希表或称为散列表,是一种常见的、使用频率非常高的数据存储方案。本文将站在开发者的角度,带着大家一起探究哈希的世界,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-05-05

最新评论