Python語言中__init__與__new__的區別是什麼?
__new__和__init__二者都是Python面嚮物件語言中的函式,其中__new__比較少用,__init__相對常用,那麼兩者有什麼區別呢?以下是詳細的內容:
__new__作用:建立物件,並分配記憶體
__init__作用:初始化物件的值
注意:
1、與java相比,java只有一個構造器。而python__new__方法與__init__方法組合,才能稱為一個對應類似於java中的構造器
2、先執行__new__ ,建立物件,並分配記憶體.
再執行__init__,初始化物件的值。
3、任何類都繼承於object類。
我們一般不重寫__new__方法。 我們不重寫,就預設呼叫父類的__new__方法。
4、__new__方法 ,一定要return一個物件。 如果自己重寫__new__方法,但是沒有return出一個物件。連物件都沒建立成功,後面是不會進行初始化物件的。
例子1:
class Person(object):
def __init__(self,name,id,sex):
self.name = name
self.id = id
self.sex = sex
print("初始化物件的值")
def __new__(cls, *args, **kwargs):
print("開始建立物件,並分配記憶體")
if __name__== '__main__':
p = Person("張三",12."男")
執行結果,只執行了__new__方法,並沒有執行__init__方法。
為啥呢? 因為new函式,沒有返回一個物件。
正確的用法
class Person(object):
def __init__(self,name,id,sex):
self.name = name
self.id = id
self.sex = sex
print("初始化物件的值")
def __new__(cls, *args, **kwargs):
print("開始建立物件,並分配記憶體")
self = super().__new__(cls)
return self
if __name__ == '__main__':
p = Person("張三",12."男")
列印結果:
開始建立物件,並分配記憶體
初始化物件的值
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2948616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python語言中/與//的區別是什麼?Python
- Python __new__ 和 __init__ 的區別Python
- Python中__new__和__init__的區別與聯絡Python
- Python語言中=和==有什麼區別?Python
- Python面試之理解__new__和__init__的區別Python面試
- Python學習教程_Python語言中=和==有什麼區別?Python
- C++語言中 *與&的作用分別是什麼啊?C++
- Python語言中的模組、包、庫之間有什麼區別?Python
- python和c語言的區別是什麼PythonC語言
- 什麼是python?與PHP有什麼區別?PythonPHP
- python中__init__ 和__new__的對比Python
- Python和C語言區別是什麼?PythonC語言
- Python和GO語言之間的區別是什麼?PythonGo
- Golang語言中的method是什麼Golang
- python中的__init__ 、__new__、__call__小結Python
- 一問搞懂python的__init__和__new__方法Python
- python is和==的區別是什麼?Python
- Python中/與//的區別是什麼?其如何使用?Python
- Python和GO語言之間的區別是什麼?Python培訓PythonGo
- Golang語言中的interface是什麼(下)Golang
- Golang語言中的interface是什麼(上)Golang
- 在R語言中,因子是什麼R語言
- "->" 在c語言中是什麼意思?C語言
- 簡述Python類中的 __init__、__new__、__call__ 方法Python
- python語言中類和函式的作用及區別!Python函式
- SCRM與CRM的區別是什麼?
- DMAIC與DMADV的區別是什麼?AI
- go語言中make和new有什麼作用以及區別?Go
- R語言的特點是什麼?和Python有何區別?R語言Python
- Java和Python是什麼?有什麼區別?JavaPython
- python中類方法的區別是什麼Python
- opencv和Python的區別是什麼?Python開發!OpenCVPython
- Python語言中變數名是什麼?命名規則有哪些?Python變數
- Python程式設計基礎(一)程式語言是什麼?編譯型語言和解釋型語言的區別|Python是什麼?Python程式設計編譯
- Python這麼火,它與其他程式語言有什麼區別?Python
- python和C語言哪個難?它們的區別是什麼?PythonC語言
- Python 語言中的 “鴨子型別”Python型別
- python屬性和方法的區別是什麼Python