python 魔法方法 一 構造和析構

2022-06-25 17:06:13 字數 2556 閱讀 8454

魔法方法總是被雙下劃線包圍,例如:__init__()

魔法方法是物件導向的python的一切,它的魔力體現在總能在合適的時候呼叫。

先來介紹析構和構造的三個魔法方法:

__init__():構造方法,類在例項化成物件的時候會首先呼叫這個方法(可選,根據需求)

__new__():才是在乙個物件例項化的時候所呼叫的乙個方法,與其他魔方方法不同,它的第乙個引數是cls(類),其他引數會傳給__init__()

__del__():如果說__init__()和__new__()是物件的構造器話,__del__()方法將是打工物件被銷毀時呼叫

1、__init__(self[,...])

例項:

1

class

rectangle:

2'''

3定義個乙個矩形列,需要長寬兩個引數

4需要物件在初始化的時候擁有長寬兩個引數,因此需要重寫__init__()方法

5'''

6def

__init__(self,x,y): #

__init__()返回值一定是none,所以不需要return語句

7 self.x =x

8 self.y =y

9def

getperl(self):

10return (self.x + self.y) * 2

11def

getarea(self):

12return self.x *self.y

1314 rect = rectangle(3,4)

15print(rect.getarea(),rect.getperl())

列印結果:

這裡需要注意的是,__init__()方法的返回值一定是none,不能是其他,否則將報錯:

1

class

a():

2def

__init__

(self):

3return"a

"45 cup = a()

執行結果:

traceback (most recent call last):

file

"", line 1, in

cup =a()

typeerror:

__init__() should return none, not

'str

'

所以一般在需要進行初始化的時候才重寫__init__()方法,其實__init__()並不是例項化物件時第乙個被呼叫的魔法方法

2、__new__(cls[,...])

__new__()才是在例項化物件時所呼叫的第乙個方法。它跟其他魔法方法不同,它的第乙個引數不適合self而是類(cls),而其他的引數會直接傳遞給__init__()方法

__new__()方法需要返回乙個例項化物件,通常是cls這個例項化的物件,當然也可以返回其他物件。

__new__()方法平時很少去重寫它,一般讓python用預設的方案執行就可以了。但是有一種情況需要重寫這個魔法方法,就是當繼承乙個不可變型別的時候,它的特性就尤為重要了。

1

class

capstr(str):

2def

__new__

(cls,string):

3 string =string.upper()

4return str.__new__(str,string) #

這裡一定是返回繼承類的__new__()方法,否則容易造成死迴圈

56 capstr = capstr('

good afternoon')

7print

(capstr)89

#結果為:good afternoon

這裡返回的str.__new__(str,string)做法是很值得推薦的,只需要重寫關組的內容,其他的瑣碎東西交給python的預設機制去完成就可以了,畢竟python本身比我們自己寫的要好很多

3、__del__(self)

如果說__init__()和__new__()方法是物件的構造器的話,那麼python也析構了乙個構造器,__del__()方法,當物件被銷毀時,這個方法就一定會被呼叫,但要注意的是,並非del x就等同於自動呼叫了x.__del__(),__del__()方法是當垃圾**機制**這個物件的時候呼叫的

>>> class

c():

def__init__

(self):

print('

我是__init__()方法')

def__del__

(self): \

print('

我是__del__()方法')

>>> c1 =c()

我是__init__()方法

>>> c2 =c1

>>> c3 =c2

>>> del

c1>>> del

c2>>> del

c3我是__del__()方法

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

python 魔法方法

魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...

python魔法方法

python魔術方法是特殊方法的暱稱。它是簡單而又強大,為了被python直譯器呼叫而存在的方法。python提供豐富的元物件協議,讓語言的使用者和核心開發者擁有並使用同樣的工具 例子引用 流暢的python 一摞python風格的紙牌 import collections namedtuple用來...