理解Python中的 init 和 new

2021-10-05 13:36:57 字數 1680 閱讀 2003

先來看一段**:

class a(object):  # -> don't forget the object specified as base

def __new__(cls):

print ("a. __new__ called")

return super().__new__(cls)

def __init__(self):

print ("a. __init__ called")

a()

輸出結果:

a. __new__ called

a. __init__ called

執行的順序是先__new____init__。因為函式__new__在我們呼叫類的時候會被自動呼叫,並且返回 instance 給__init__,也就是__init__中的 self 。

再來看一段**:

class a(object):

def __new__(cls):

print ("a.__new__ called")

def __init__(self):

print ("a.__init__ called") # -> is actually never called

print (a())

輸出結果:

a.__new__ called

none

這裡__init__並沒有被呼叫。這是因為與之前不同,這次__new__override 了父類的__new__之後,沒有使用super()繼承父類其他建立 instance 的 method ,只是單純的執行列印。所以並沒有返回乙個 instance 給__init__的 self。所以返回none

再來看如果在__new__中加入return功能會如何:

class a(object):

def __new__(cls):

print ("a. __new__ was called")

return 29

print (a())

輸出結果是:

a.__new__ called

29

得用__new__函式,我們可以在建立類的 instance 的時候返回其他型別的 instance。

class sample(object):

def __str__(self):

return "a returned an instance of sample()"

class a(object):

def __new__(cls):

return sample()

print (a())

輸出結果:

a returned an instance of sample()

python中對 init 的理解

一 self的位置是出現在 首先,self是在類的方法中的,在呼叫此方法時,不用給self賦值,python會自動給他賦值,而且這個值就是類的例項 物件本身。也可以將self換成別的叫法例如seef,但不建議,因為大家習慣也預設了寫成self。二 self的值是什麼?self的值是python會自動...

如何理解 Python 中的 init

定義類的時候,若是新增 init 方法,那麼在建立類的例項的時候,例項會自動呼叫這個方法,一般用來對例項的屬性進行初使化。比如 class testclass def init self,name,gender 定義 init 方法,這裡有三個引數,這個self指的是一會建立類的例項的時候這個被建立...

詳解Python中的 init 和 new

一 init 方法是什麼?使用python寫過物件導向的 的同學,可能對 init 方法已經非常熟悉了,init 方法通常用在初始化乙個類例項的時候。例如 複製 如下 coding utf 8 class person object silly person def init self,name,a...