_ _ init() _ _(self[,...])
我們有時在類定義寫__init()__方法,但是有時又沒有。__init()__方法相當於其他面向對象的編程語言中的構造方法,也就是類在實例化成對象時首先會調用的一個方法。當我們寫代碼時需要進行初始化的時候,我們才去寫 _ _ init() _ _方法,沒有需要時我們自然不會去寫入這個方法。下面我們給出一個實例,我們先定義一個類,擁有計算面積與周長兩個方法,然后需要對象在初始化擁有長和寬兩個參數
class Test:
def __init__(self, x, y):
self.x = x
self.y = y
def getArea(self):
return self.x * self.y
def grtPeri(self):
return (self.x + self.y) * 2
這里需要注意的是__init()__方法的返回值一定是none,其他就會報錯。
_ _new _ _(cls[,...])
_ _ new _ _()才是一個對象實例化時調用的第一個方法,它和其他的雙下划線包圍的方法不同,它的第一個參數不是sel而是這個類(cls),而其他的參數會直接傳遞給 _ _ init() _ _ 方法的。
_ _ new _ _()方法需要返回一個實例對象,通常是cls這個實例化的對象,當然我們也可以返回給其他的對象。
_ _ new _ _()方法平時我們很少去重寫它,一般讓python用默認的執行方案就行了。但是還會有情況需要我們取重寫這個方法,比如當繼承一個不可變的類型時,它的特性就會凸顯出來。
下面給出實例。
class CapStr(str):
def __new__(cls, string):
string = string.upper()
return str.__new__(cls, string)
這里返回str.new(cls, string)的優點在於哪呢,因為此時我們只需要注意我們在此處重寫的部分,其他瑣碎的東西可以完全交給python的默認機制就行了,交給它處理可比我們自己寫出錯的概率要小得多。
_ _ del _ _(self)
如果說前面說的兩個方法是對象的構造器的話,那么python也提供了一個析構器,叫做 _ _ del _ _(self)方法。當對象將要被銷毀的時候,這個方法就會調用。但是要注意的是,冰粉del x就相當於調用x. _ _ del _ _(), _ _ del _ _()方法是當垃圾回收機制回收這個對象時候調用的。
舉個例子
class A:
def __init__(self):
print("方法1被調用")
def __del__(self):
print("方法2被調用")