我们都知道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 '' % (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__(): ('abc',) {}

__init__(): <__main__.democlass object at> abc

__new__(): ('xyz',) {}

__init__(): <__main__.democlass object at> xyz

0 2

1 2

到此这篇关于python不同版本的_new_不同点总结的文章就介绍到这了,更多相关python不同版本中的_new_有何不同内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python3的各个版本有什么区别_python不同版本的_new_不同点总结相关推荐

  1. python版本之间的区别_Python各版本之间的区别

    Python各版本之间的区别 发布时间:2020-06-17 14:22:08 来源:亿速云 阅读:161 作者:鸽子 Python发展至今有哪些版本和各版本的区别是: 一.系统区别: 1.Downl ...

  2. python版本分类及区别_python新版本与旧版本的区别

    python 3.X 与python 2.x的区别 (2011-11-27 18:30:15) 转载▼ 分类:python 标签: it 1.性能 Py3.0运行 pystone benchmark的 ...

  3. python不同的版本有什么区别_多版本python的区别方法

    最近做在线教育平台的过程中,由于开始使用的是最新的pyhon3.6版本,在后面需要用到xadmin管理后台(django本身的admin也可以,由于跟着的视频课程使用了xadmin,担心后面会有坑自己 ...

  4. HTTP 各版本特点与区别

    HTTP 各版本特点与区别 HTTP 各版本一览表 版本 功能 备注 0.9 仅支持 Get 仅能访问 HTML 格式资源 简单单一 1.0 新增POST,DELETE,PUT,HEADER等方式 增 ...

  5. python3各版本区别-Python各版本之间的区别

    Python各版本之间的区别 发布时间:2020-06-17 14:22:08 来源:亿速云 阅读:148 作者:鸽子 Python发展至今有哪些版本和各版本的区别是: 一.系统区别: 1.Downl ...

  6. python默认安装地址_python多版本下设置python3为默认的方法

    python3设置为多版本为默认的方法 如何在双python下设置python3为默认 在C:\Program下举例 第一步安装好python2和python3后设置好环境变量 第二步去掉python ...

  7. Python 应用领域以及版本之间的区别

    Python 应用领域以及版本之间的区别 一.Python应用领域 Python+人工智能,给你更多研究方向选择! 企业级综合实战项目,集六大前沿技术为一体 二. Python 2与Python 3的 ...

  8. Python3.x和Python2.x的区别[转]

    Python3.x和Python2.x的区别 1.性能  Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 ...

  9. python3.x和python2.x唯一区别_Python3.x和Python2.x的区别介绍

    1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果. Py3.1性能比Py2 ...

最新文章

  1. 智慧屏到底是不是鸿蒙,荣耀智慧屏究竟是电视还是“新物种”?
  2. “Duke选择大奖”荟萃2009最具创新的Java技术应用
  3. python入门到实践-看完Python从入门到实践后该看什么书?
  4. ARM嵌入式编程之STM32的命名方法 STM32F103VET6命名解释
  5. python sub 不区分大小写_解决Python列表字符不区分大小写的问题
  6. java oracle临时表,JdbcTemplate操作oracle的临时表
  7. mysql+缓冲池脏块率高_什么是数据库的 “缓存池” ?(万字干货)
  8. Spring 框架基础(04):AOP切面编程概念,几种实现方式演示
  9. Python实现小球游戏
  10. kittito_rosbag入坑教程
  11. SQL2005 游标学习
  12. linux会计软件,免费好用的会计软件(Manager for Mac)
  13. mysql 登录失败18456_Sqlserver 2005 登录用户提示“sa'登录失败。错误18456“的解决方案...
  14. 计算机内存不足16g内存,高手亲自教你win10 16g内存显示内存不足的修复要领
  15. Excel2007无法卸载:安装程序包的语言不受系统支持。微软的卸载程序也不行。——只能手工删除
  16. Confirming the Buzz about Hornets——2021美赛C题思路及题解
  17. JavaScript之简繁体转化代码示例
  18. 论文那些事—ZOO: Zeroth Order Optimization Based Black-box Attacks
  19. 微软75亿美元收购ZeniMax及其旗下工作室;KPS同意21亿美元收购Garrett全部资产 | 美通企业日报...
  20. 让员工都是决策者!受到丰田集团启发:让企业少花500万的诀窍

热门文章

  1. Benefits and limitations of genome-wide association studies GWAS--益处和局限性
  2. java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!
  3. c语言统计最长单词长度,求3个字符串中最长单词的长度 求救 会一个的
  4. 二值网络训练--Training Competitive Binary Neural Networks from Scratch
  5. C++ 汇编代码查看
  6. 报错解决:ERROR: Failed to format E:; DiskPart errorlevel -2147212243.
  7. Python读CSV数据
  8. java 泛型反射_Java使用反射来获取泛型信息示例
  9. mysql查看修改记录_(转)MySql中监视增删改查和查看日志记录
  10. Xcode7.1环境下上架iOS App到AppStore 流程 (1)