__getitem__\__setitem__\__delitem__
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] def __setitem__(self,key,value): self.__dict__[key] = value def __delitem__(self, key): del self.__dict__[key] f = Foo('egon',38,'男') print(f['name']) f['hobby'] = '男' print(f.hobby,f['hobby']) print(f.__dict__) del f['hobby'] print(f.__dict__)
# __new__ class A: def __init__(self): self.x = 1 print('in init function') def __new__(cls, *args, **kwargs): print('in new function') return object.__new__(A, *args, **kwargs) a = A() print(a.x) in new function in init function 1
# __eq__ class A: def __init__(self,name): self.name = name def __eq__(self, other): if self.name == other.name: return True else: return False obj1= A('egg') obj2 = A('egg') print(obj1 == obj2)
# __hash__
class A:
def __init__(self,name,sex):
self.name = name
self.sex = sex
def __hash__(self):
return hash(self.name+self.sex)
a = A('egon','男')
b = A('egon','男')
print(hash(a))
print(hash(b))
hashlib模块
import hashlib #提供摘要算法的模块 md5 = hashlib.md5() md5.update(b'tim') print(md5.hexdigest())
# 不管算法多么不通,摘要的功能始终不变
# 对于相同的字符串进行使用同一个算法进行摘要,得到的值总是不变的
# 如果使用不通算法对相同的字符串进行摘要得到的值应该不同
# 不管使用什么算法,使用hashlib的方式永远不变
import hashlib #提供摘要算法的模块 sha = hashlib.sha1() sha.update(b'tim') print(sha.hexdigest())
# sha 算法随着算法复杂度的增加,我摘要的时间成本和空间成本都会增加
# 基于摘要算法
# 密码的密文存储
# 文件的一致性验证
# 在下载的时候,检查我们下载的文件和远程服务器上的文件是否一致
# 两台机器上的两个文件,想检查这两个文件是否相等
import hashlib #提供摘要算法的模块 usr = input('username: ') pwd = input('password: ') with open('userinfo') as f: for line in f: user,passwd,role = line.split('|') md5 =hashlib.md5() md5.update(bytes(pwd,encoding='utf-8')) md5_pwd = md5.hexdigest() if usr == usr and md5_pwd == passwd: print('sucess login in')
# 加盐 import hashlib #提供摘要算法的模块 md5 = hashlib.md5(bytes('salt',encoding='utf-8')) md5.update(b'tim') print(md5.hexdigest())
# 动态加盐
# 用户名的一部分或者直接使用用户名作为盐