Python 中__new__()和__init__()的区别
生活随笔
收集整理的這篇文章主要介紹了
Python 中__new__()和__init__()的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自: https://blog.csdn.net/weixin_37579123/article/details/89515577
__new__方法:類級別的方法
特性: 1.是在類準備將自身實例化時調用,并且至少需要傳遞一個參數cls,此參數在實例化時由python解釋器自動提供;2.始終是類的靜態方法,即使沒有被加上靜態方法裝飾器;3.必須要有返回值,返回實例化出來的實例;在自己實現__new__()時需要注意:可以return父類(通過super(當前類名,cls)).__new__出來的實例, 或者直接是object的__new__出來的實例class A(object):passa=A() # 默認調用父類object的__new__()方法來構造該類的實例 print (a) # 返回的是<__main__.A object at 0x0000024352732630> class A(object):def __new__(cls):"重寫__new__方法"return "abc"a=A() print (a) # 'abc',實例化對象取決于__new__方法,__new__返回什么就是什么 print (type(a)) # <class 'str'> 通過__new__()方法實現單例class Singleton(object):def __new__(cls,*args,**kwargs):if not hasattr(cls,"_instance"):cls._instance=super(Singleton,cls).__new__(cls)return cls._instancea=Singleton() b=Singleton() c=Singleton() print (a) print (b) print (c)輸出結果: <__main__.Singleton object at 0x000002474C92D550> <__main__.Singleton object at 0x000002474C92D550> <__main__.Singleton object at 0x000002474C92D550>__init__方法:實例級別的方法
特性: 1.有一個參數self,該self參數就是__new__()返回的實例;2.__init__()在__new()的基礎上完成初始化動作,不需要返回值;3.若__new__()沒有正確返回當前類cls的實例,那__init__()將不會被調用4.創建的每個實例都有自己的屬性,方便類中的實例方法調用;對比下面代碼理解會更加清晰:class B():def __new__(cls):print ("__new__方法被執行")def __init__(self):print ("__init__方法被執行")b=B() 結果: __new__方法被執行 class B():def __new__(cls):print ("__new__方法被執行")return super(B,cls).__new__(cls)def __init__(self):print ("__init__方法被執行")b=B() 結果: __new__方法被執行 __init__方法被執行轉載于:https://www.cnblogs.com/nyist-xsk/p/11227508.html
總結
以上是生活随笔為你收集整理的Python 中__new__()和__init__()的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 枚举--遍历搜索空间的例子:熄灯问题
- 下一篇: 数组 字符串的解构赋值 以及const命