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("登陆失败")

 

 

  

 

 

 

  

posted @ 2018-11-10 10:09  柳帅  阅读(184)  评论(0编辑  收藏  举报
//替换成自己路径的js文件