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

      

      

  • 相关阅读:
    Altium Designer如何从已有的PCB图中导出封装库
    获得内核函数地址的四种方法
    poj2976 Dropping tests
    poj3045 Cow Acrobats
    CF916C Jamie and Interesting Graph
    poj3104 Drying
    poj2455 Secret Milking Machine
    poj2289 Jamie's Contact Groups
    网络流最小路径覆盖
    CF897C Nephren gives a riddle
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/9938496.html
Copyright © 2020-2023  润新知