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 lxml模块安装教程
Jun 02 Python
Python 绘图和可视化详细介绍
Feb 11 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
40个你可能不知道的Python技巧附代码
Jan 29 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python 存取npy格式数据实例
Jul 01 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
Pytest allure 命令行参数的使用
Apr 18 Python
django中websocket的具体使用
Jan 22 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
香妃
2021/03/03 冲泡冲煮
PHP 上传文件大小限制
2009/07/05 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
自我评价范文点评
2013/12/04 职场文书
采购主管岗位职责
2014/02/01 职场文书
小学生操行评语大全
2014/04/22 职场文书
超市创意活动方案
2014/08/15 职场文书
杭白菊导游词
2015/02/10 职场文书
个人总结与自我评价
2015/02/14 职场文书
应聘教师求职信范文
2015/03/20 职场文书
朋友聚会开场白
2015/06/01 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
详解Django的MVT设计模式
2021/04/29 Python