gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python不同版本的_new_不同点总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

我们都知道python的版本不同,在使用的时候就有所区别。鉴于我们推荐小伙伴们选择python3版本,所以这方面的区别了解的不是很多。就拿_new_来说,在python2和3中的写法是不一样的,之前有接触_new_的小伙伴想必没有注意到这个问题。接下来讲讲new的基本用法,然后就python不同版本中_new_的区别带来详解.

new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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的写法 。

?
1
2
3
4
5
6
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写法一样,那么倒数第二行会报错 。

?
1
"TypeError: object() takes no parameters"

根据上面的运行结果我们可以发现,在python3中强行使用python2的写法是不可行的.

Python __new__()知识点扩充 。

__new__() 是一种负责创建类实例的静态方法,它无需使用 staticmethod 装饰器修饰,且该方法会优先 __init__() 初始化方法被调用.

一般情况下,覆写 __new__() 的实现将会使用合适的参数调用其超类的 super().__new__(),并在返回之前修改实例。例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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_有何不同内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.py.cn/toutiao/21774.html 。

最后此篇关于python不同版本的_new_不同点总结的文章就讲到这里了,如果你想了解更多关于python不同版本的_new_不同点总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com