python不同版本的_new_不同點總結
我們都知道python的版本不同,在使用的時候就有所區(qū)別。鑒于我們推薦小伙伴們選擇python3版本,所以這方面的區(qū)別了解的不是很多。就拿_new_來說,在python2和3中的寫法是不一樣的,之前有接觸_new_的小伙伴想必沒有注意到這個問題。接下來講講new的基本用法,然后就python不同版本中_new_的區(qū)別帶來詳解。
new方法接受的參數(shù)雖然也是和init一樣,但init是在類實例創(chuàng)建之后調(diào)用,而 new方法正是創(chuàng)建這個類實例的方法。
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寫法一樣,那么倒數(shù)第二行會報錯
"TypeError: object() takes no parameters"
根據(jù)上面的運行結果我們可以發(fā)現(xiàn),在python3中強行使用python2的寫法是不可行的。
Python __new__()知識點擴充
__new__() 是一種負責創(chuàng)建類實例的靜態(tài)方法,它無需使用 staticmethod 裝飾器修飾,且該方法會優(yōu)先 __init__() 初始化方法被調(diào)用。
一般情況下,覆寫 __new__() 的實現(xiàn)將會使用合適的參數(shù)調(diào)用其超類的 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_有何不同內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python numpy 數(shù)組的向量化運算操作方法
這篇文章主要介紹了Python numpy數(shù)組的向量化運算操作方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
Python內(nèi)建函數(shù)之raw_input()與input()代碼解析
這篇文章主要介紹了Python內(nèi)建函數(shù)之raw_input()與input()代碼解析,具有一定參考價值,需要的朋友可以了解下。2017-10-10

