28、面向對象的進階、摘要算法
阿新 • • 發佈:2018-01-23
abi inf 情況下 執行 dig bubuko 圖片 info http
一、面向對象的進階
1、__getitem__:實例傳一個參數,傳到它這裏,返回值,返回什麽值自己可以定義。
class Foo: def __init__(self,name,sex): self.name=name self.sex=sex def __getitem__(self, item): return ‘nishishabi‘ #自定義返回的值 f=Foo(‘egg‘,‘男‘) print(f[‘a‘])
正常情況下,應該返回參數所對象的正確值 的代碼應該是這個樣子:
class Foo:def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __getitem__(self, item): if hasattr(self,item): return self.__dict__[item]
2、__setitem__:為類設置或者賦值,增長情況下應該是對__dict__增加屬性值,(也可以設置成其他的亂七八糟的),主要是在對對象進行字典操作的時候會調用這個內置函數。
class Foo: def __init__(self,name,sex): self.name=name self.sex=sex def __setitem__(self, key, value): self.__dict__[key]=value #這個應該是它的正常的作用,設置成其他的也行 f=Foo(‘egg‘,‘男‘) f[‘hobby‘]=‘apple‘ #進行字典類操作的時候會調用這個內置函數 print(f.__dict__)
3、__delitem__:執行字典類似的刪除的操作的時候,會默認執行的內置函數(如果不想讓他有它應該有的作用的時候,也可以設置成別的)
class Foo: def __init__(self,name,sex): self.name=name self.sex=sex def __setitem__(self, key, value): self.__dict__[key]=value def __delitem__(self, key): #字典類刪除操作的時候會執行到它,這是它應該有的作用,設置成其他的也行 del self.__dict__[key] f=Foo(‘egg‘,‘男‘) f[‘hobby‘]=‘apple‘ del f[‘name‘] print(f.__dict__)
這種的就是執行了其他的自定義的操作,沒有進行他應該有的刪除操作。
class Foo: def __init__(self,name,sex): self.name=name self.sex=sex def __setitem__(self, key, value): self.__dict__[key]=value def __delitem__(self, key): print(‘nishishabi‘) #在這裏 f=Foo(‘egg‘,‘男‘) f[‘hobby‘]=‘apple‘ print(f.__dict__) del f[‘name‘] print(f.__dict__)
總之:item系列就是在執行類似字典操作的時候 ,提供到的內置函數。
二、摘要算法:加密
hashlib:提供摘要算法的模塊
import hashlib # 提供摘要算法的模塊 md5 = hashlib.md5() md5.update(b‘123456‘) print(md5.hexdigest()) #aee949757a2e698417463d47acac93df
註:不管算法多麽不同,摘要的功能始終不變;
對於相同的字符串使用同一個算法進行摘要算法,得到的值總是不變的;
使用不同算法對相同的字符串進行摘要,得到的值應該不同;
不管使用什麽算法,hashlib的方式總是不變的;
sha :摘要算法的一種,隨著等級的算法復雜程度的增加,算法所占用的時間和空間增加
摘要算法的用處:
1、密碼的密文儲存,之後可以將用戶輸入的密碼摘要算法後進行比對,進行密碼驗證操作。
2、文件的一致性驗證
1)在下載的時候,檢查我們下載的文件和遠程服務器的文件是否一致
2)兩臺機器上的文件,你想檢查知否一致
加鹽:對摘要算法進行安全升級
動態加鹽:加鹽時候的對象是可變的
import hashlib mm=hashlib.md5(bytes(‘salt‘,encoding=‘utf-8‘)) mm.update(b‘wangyuxing‘) ret=mm.hexdigest() print(ret)
加鹽:
import hashlib md5 = hashlib.md5(bytes(‘鹽‘,encoding=‘utf-8‘)+b‘‘)#加鹽步驟 md5 = hashlib.md5() md5.update(b‘123456‘) print(md5.hexdigest())
28、面向對象的進階、摘要算法