python 反射、md5加密
一、issubclass,type,isinstance
1、issubclass :判断xx类是否是yyy类型(包括子类),用于类之间的判定
class GrandF: pass class Father(GrandF): pass class Son(Father): pass print(issubclass(Son,Father))#True print(issubclass(Son,GrandF))#True 可以隔代判断类型,子类属于父类的父类 print(issubclass(Father,Son))#False 父类不属于子类
2、type :精确的返回数据类型
# type( ) 精确的返回数据类型 class Foo: pass class Bar(Foo): pass b=Bar() print(type(b))#<class '__main__.Bar'>(返回离自己最亲的那个数据类型) print(type(Bar))#<class 'type'>
3、isinstance:也可以判断xx是yyy类型的数据,但是没有type那么精准,可以往上判断
#isinstance class GrandF: pass class Father(GrandF): pass class Son(Father): pass s=Son() f=Father() g=GrandF() print(isinstance(s,Son))#True 儿子是属于儿子类型 print(isinstance(s,Father))#True 儿子也属于父亲类型的 print(isinstance(s,GrandF))#True 儿子也属于爷爷类型的 print(isinstance(g,Father))#False # isinstance 可以判断对象属于xx类型,可以网上判断,不能往下判断
二、区分函数和方法
1、function:函数
method:方法
2、判断方法
# 判断方法还是函数 from types import MethodType,FunctionType ... print(isinstance(xx,MethodType)) #返回True则为方法 print(isinstance(xx,FunctionType)) #返回True则为函数
3、总结
1、类方法:不论什么情况,都是方法
2、静态方法:不管什么时候,都是函数
3、实例方法:如果是实例访问,则是方法;如果是类名访问就是函数
三、反射
1、外部文件如:daniu.py
def chi(): print("⼤⽜⼀顿吃100个螃蟹") def he(): print("⼤⽜⼀顿喝100瓶可乐") def la(): print("⼤⽜不⽤拉") def shui(): print("⼤⽜⼀次睡⼀年")
wife="猪小妹"
2、引入外部文件 import
import daniu while 1: s=input("输入你想要测试的功能:") if hasattr(daniu,s):#判断daniu文件里面是否存在s功能 fn=getattr(daniu,s)#如果存在,获取句柄 fn()#执行s功能
3、反射常用的命令
hasattr(对象,属性(字符串)) 查看对象中是否存在该属性,如果存在返回True getattr(对象,属性(字符串)) 获取对象中xxx属性,并返回 setattr(对象,属性(字符串),值) 1、如果对象中存在该属性,则直接赋值 2、如果不存在,则新建该属性,并赋值 delattr(对象,属性(字符串)) 从对象中删除该属性
四、md5加密
1、准备点盐(SALT=b' adfsgghhjh) --------------------(非必需步骤)
2、流程:
import hashlib obj=hashlib.md5(加盐) obj.update(铭文的,bytes) obj.hexdigest( )获取密文
3、实例:账户登录加密
# 主要应用于密码的加密 import hashlib # 盐 SALT=b"ssfSGDF456AGSas" # 制作加密函数 def jiami(connent): obj=hashlib.md5(SALT) #创建md5对象 obj.update(connent.encode("utf-8")) #必须使用bytes类型铭文 return obj.hexdigest() # # 注册 # username=input("请输入用户名:") #joinl # passwd=input("请输入密码:") #1234567 # passwd=jiami(passwd) # print(passwd) #504510efd4c441addb07d1371442557e uname="joinl" upwd="504510efd4c441addb07d1371442557e" # 登陆 username=input("请输入用户名:") passwd=input("请输入密码:") if uname==username and jiami(passwd)==upwd: print("登陆成功") else: print("登陆失败")