#

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位长度
动态加盐
原文地址:https://www.cnblogs.com/zhangchen-sx/p/10997083.html