先來看一段**:
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...