1. 程式人生 > >28、面向對象的進階、摘要算法

28、面向對象的進階、摘要算法

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(b123456)
print(md5.hexdigest())
#aee949757a2e698417463d47acac93df

註:不管算法多麽不同,摘要的功能始終不變;

  對於相同的字符串使用同一個算法進行摘要算法,得到的值總是不變的;

  使用不同算法對相同的字符串進行摘要,得到的值應該不同;

  不管使用什麽算法,hashlib的方式總是不變的;

sha :摘要算法的一種,隨著等級的算法復雜程度的增加,算法所占用的時間和空間增加

摘要算法的用處:

  1、密碼的密文儲存,之後可以將用戶輸入的密碼摘要算法後進行比對,進行密碼驗證操作。

  2、文件的一致性驗證

    1)在下載的時候,檢查我們下載的文件和遠程服務器的文件是否一致

    2)兩臺機器上的文件,你想檢查知否一致

加鹽:對摘要算法進行安全升級 

動態加鹽:加鹽時候的對象是可變的 

import hashlib
mm=hashlib.md5(bytes(salt,encoding=utf-8))
mm.update(bwangyuxing)
ret=mm.hexdigest()
print(ret)

加鹽:

import hashlib
md5 = hashlib.md5(bytes(,encoding=utf-8)+b‘‘)#加鹽步驟
md5 = hashlib.md5()
md5.update(b123456)
print(md5.hexdigest())

28、面向對象的進階、摘要算法