#
1 所有的反射 都是用字符串 操作对象的属性 2 __名字 在类的外部就不能用了 3 私有化的 不能被子类继承,也不能在其他任何类中调用 程序的逻辑问题 # 1. 不可以对某些计算结果直接赋值 # 2. 一般是通过对计算结果产生影响的属性进行重新赋值 反射 -- 使用字符串的方式,操作对象的属性(对象属性,类的动态属性(方法)) # 在python中 一切皆对象(类也是对象,对象也是对象,模块也是对象)
import hashlib #加密不解密 摘要算法 # hashlib.md5 32位 快捷简单 通用 # hashlib.sha1 40位 方兴未艾 md5_obj = hashlib.md5() #里面可以加盐 b'beijing' md5_obj.update('zhangchen'.encode('utf-8')) #只接受bytes类型 ret = md5_obj.hexdigest() #hex 16进制 digest消化 16进制的处理结果 print(ret)
#暴力破解 撞库 cmd5.com 网站
反射的另外两个内置函数 setattr a.b= c setattr(a,'b',c) delattr del a.b delattr(a,'b') 两个内置函数 A,B(A),C(B) type(c_obj) is C 只能判断出和C的关系 isinstance(c_obj,A) 不仅能判断C,还有AB issubclass(C,B) 内置方法 __new__ 构造方法 __init__ 初始化方法 __call__ 对象() __del__ 析构方法 在del对象之后,删除对象之前执行 __str__ 能在打印对象时,不输出无用的内存地址,输出你需要的格式化字符串 __repr__ %r,repr(),做__str__方法的备胎 __eq__(self,other) obj1 == obj2 __len__ len(obj) # ==> obj.__len__() item 使用中括号的形式操作对象,需要完成对应的item系列的方法 __getitem__ obj['xxx'] ==> obj.xxx __setitem__ obj['xxx'] = yyy ==>obj.xxx=yyy __delitem__ del obj['xxx'] ==>del obj.xxx
NameError 名称错误
AttributeError 属性错误
ValueError 值错误
StopIteration 迭代错误
IndexError 索引错误
AssertionError 断言错误
# 断言 assert 1==2 # assert bool/条件 如果是False就报错,如果是True就继续执行 print('继续执行')
try: 有可能出错的代码 except: 处理异常 else: pass finally: 无论如何都会执行的代码
加固定的盐 md5_obj = hashlib.md5('任意的字符串'.encode('utf-8')) md5_obj.update('123456'.encode('utf-8')) ret = md5_obj.hexdigest() print(ret)
# 动态加盐 - 最安全的存储密码的方式 username = input('账号: ') pwd = input('密码: ') md5_obj = hashlib.md5(username.encode('utf-8')) md5_obj.update(pwd.encode('utf-8')) ret = md5_obj.hexdigest() print(ret) # sha1 40位长度 # md5 32位长度