Python語言中__init__與__new__的區別是什麼?

老男孩IT教育機構發表於2023-04-25

  __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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章