28面向对象的进阶摘要算法

Posted wyx666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了28面向对象的进阶摘要算法相关的知识,希望对你有一定的参考价值。

 一、面向对象的进阶

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面向对象的进阶摘要算法的主要内容,如果未能解决你的问题,请参考以下文章

python学习_day28_面向对象进阶

进阶学Python:Python面向对象基础!

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

面向对象进阶

python基础-面向对象进阶