一、常用魔術方法
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、sha1等 。
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...