python 魔術方法

2021-10-01 13:41:21 字數 3586 閱讀 2311

一、常用魔術方法

1.del 銷毀魔術方法

觸發時機:當乙個物件在記憶體中被銷毀的時候自動執行

引數:至少有乙個self,接收物件

返回值:無

作用:在物件銷毀的時候做一些操作

注意:程式自動呼叫此方法,不需要我們手動呼叫。

class cat:

def __init__(self,name):

self.name=name

print("{}來了".format(self.name))

#物件在銷毀時執行

def __del__(self):

print("{}走了".format(self.name))

cat=cat("tom")

# del cat

print("程式結束")``

結果:

tom來了

程式結束

tom走了

2.call call():可以讓類的例項具有類似於函式的行為, 進一步模糊了函式和物件之間的概念。

使用方式: 物件後面加括號,觸發執行。

即:物件() 或者 類()()

class

person

:def

__init__

(self)

:pass

defeat

(self)

:print

("吃。。。"

)def

__call__

(self, num)

: he=

0for i in

range(1

,num+1)

: he+=i

print

(he)

person=person(

)person(

100)

結果:

5050
3.repr repr():改變物件的字串顯示 ­

此方法是str()的備胎,如果找不到str()就會找repr()方法。 ­

%r 預設呼叫的是 __repr()方法,

如果是字串會預設加上 『』 ­repr()方法預設呼叫repr()方法

class

person

:def

__init__

(self,name,age)

: self.name=name

self.age=age

# def __str__(self):

# return str(self.__dict__)

def__repr__

(self)

:return

"我叫{},今年{}"

.format

(self.name,self.age)

person=person(

"zs",20

)print

(person)

# text="i am 22 year old"

# print("i said :%r" % person)

# print("i said: %s" % text)

# print("i said: %s" % person)

結果:

我叫zs,今年20
4.new 例項化魔術方法

觸發時機: 在例項化對時觸發 引數:至少乙個cls 接收當前類

返回值:必須返回乙個物件例項 作用:例項化物件

注意:例項化物件是object類底層實現,其他類繼承了object的new才能夠實現 例項化物件。 沒事別碰這個魔術方法,先觸發new才會觸發init

class

dog(

object):

def__new__

(cls,

*args,

**kwargs)

:print

("---new---"

) new__=

object

.__new__(cls)

return new__

def__init__

(self)

:print

("init"

)def

__del__

(self)

:print

("del"

)dog=dog(

)print

(dog)

結果:

del
hash

雜湊(hash)也翻譯作雜湊。

hash演算法,是將乙個不定長的輸入,通過雜湊函 數變換成乙個定長的輸出,即雜湊值。 這種雜湊變換是一種單向運算,具有不可逆性即不能根據雜湊值還原出輸入信 息。

常見的hash演算法有:sm3、md5、sha­1等 。

hash主要應用在資料結構以及密碼學領域。 在不同的應用場景下,hash函式的選擇也會有所側重。

比如在管理資料結構 時,主要要考慮運算的快速性。

class

person

:def

__init__

(self,name)

: self.name=name

def__eq__

(self, other)

:return self.__dict__==other.__dict__

def__hash__

(self)

:return

hash

(self.name)

p1=person(

"zs"

)p2=person(

"ls"

)p3=person(

"ww"

)# print(p1==p2)

lst=

[p1,p2,p3]

set2=

set(lst)

print

(set2)

結果;

object at 0x0000029d7e584d68

>

,<__main__.person object at 0x0000029d7e584d30

>

,<__main__.person object at 0x0000029d7e584dd8

>

}

自定義物件能不能新增到集合中呢?能預設呼叫父類的hash和eq

object的 hash 值是怎麼算的呢,id 是hash 的16倍

自定義物件新增到集合中,一般認為兩個物件的屬性值相同就是同乙個物件 ­­自定義計算規則。

注意,如果只定義了eq方法,沒有定義hash方法,hash方法會隱式設定成 none 在自定義類中,如果沒有實現eq()和hash()方法,會繼承object的eq()方法和 hash()方法。

hash()函式預設呼叫object類的hash()方法。hash值是物件的id值/

python 魔術方法

魔術方法 呼叫方式 解釋 new cls instance myclass arg1,arg2 new 在建立例項的時候被呼叫 init self instance myclass arg1,arg2 init 在建立例項的時候被呼叫 cmp self,other self other,self o...

Python魔術方法

參考文章 python 魔術方法指南 魔術方法,顧名思義是一種可以給物件 類 增加魔法的特殊方法,它們的表示方法一般是用雙下劃線包圍 如 init from os.path import join class fileobject 給檔案物件進行包裝從而確認在刪除時檔案流關閉 def init se...

Python 魔術方法

usr bin env python coding utf 8 author ray time 2018 12 6 魔術方法例項 init 建構函式,在生成物件時呼叫,用來初始化值 del 析構函式,釋放物件時使用 比如編輯檔案,把關閉檔案的操作寫在此方法中,程式結束時就會關閉軟體 str 使用pr...