zoukankan      html  css  js  c++  java
  • python学习——约束、自定义异常、加密、日志操作

    1.约束
    类用于约束,约束其派生类:保证派生类中必须编写send方法,不然会报错
    class BaseMessage(object):
        def send(self):
            """
            必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑
            """
            raise NotImplementedError('.send()必须被重写')
    class Email(BaseMessage):
        def send(self,x1):
            pass
    obj = Email()
    obj.send()


    1.什么是接口
    接口是一种数据类型,主要用于约束派生类中必须实现执行的方法。
    python中不存在,Java和C#中存在
    2.python中使用过什么来约束呢?
    -抽象类+抽象方法:编写上麻烦,
    -人为主动抛出异常,执行是会报错:抛出异常简单明了
    3.约束时,抛出的异常是否可以用其他?
    不专业:raise Exception('.send()必须被重写')
    专业:raise NotImplementedError('.send()必须被重写')
    4.以后看代码,多揣摩心思
    5.写代码,用一下方法约束
    class BaseMessage(object):
        def send(self):
            """
            必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑
            """
            raise NotImplementedError('.send()必须被重写')
    class Email(BaseMessage):
        def send(self,x1):
            pass
    obj = Email()
    obj.send()

    6.应用场景:
    多个类,内部都必须有某些方法时,需要使用基类+异常进行约束。
    学员管理程序:
    class IBase:
        def login(self):
            raise NotImplementedError('.send()必须被重写')#约束必须要有这个功能
    class Student:
        def login(self):
            pass
        def score(self):
            pass
    class Teacher:
        def login(self):
            pass
        def exam(self):
            pass
    class Manager:
        def login(self):
            pass
    2.自定义异常
    异常处理
    def func(path,prev):
        '''
        去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者
        '''
        try:
            a = 1
        except Exception as e:
            print(e)
        return a
    def show():
        return 8
    def run():
        v1 = func()
        v2 = show()
    自定义异常类
    #  知识点:如何自定义异常
    class MyException(Exception):
        def __init__(self,code,msg):
            self.code = code
            self.msg = msg
    try:
    #  知识点:主动抛出异常
        raise MyException(1000,'操作异常')
    except ...
    3.加密
    实例方法:
    import hashlib
    SALT = b'fdafefdaf'
    
    #创建密码过程
    pwd = '123456'
    obj = hashlib.md5(SALT)
    obj.update(pwd.encode('utf8'))
    ret = obj.hexdigest()
    print(ret)
    
    def md5(pwd):
        # 实例化对象
        obj = hashlib.md5(SALT)#括号中有内容是加盐的过程,b代表字节
        # 写入要加密的字节
        obj.update(pwd.encode('utf-8'))
        # 获取密文
        return obj.hexdigest()
    usr = input('>>')
    pwd = input('>>')
    if usr == 'oldboy' and md5(pwd) == '27bbae46d6c33f3d2e87161b7336b028':
        print('登录成功')
    else:
        print('密码错误')









  • 相关阅读:
    Codeforces Round #285 (Div. 2) A, B , C 水, map ,拓扑
    hdu 5147 Sequence II 树状数组
    hdu 5900 QSC and Master 区间dp
    Codeforces Round #372 (Div. 2) A ,B ,C 水,水,公式
    51nod 1009 数字1的数量 数位dp
    hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂
    hdu 5890 Eighty seven 暴力+bitset优化背包
    hdu 5884 Sort 队列+多叉哈夫曼树
    Codeforces Round #301 (Div. 2) D. Bad Luck Island 概率DP
    Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 线段树模拟
  • 原文地址:https://www.cnblogs.com/bilx/p/11412644.html
Copyright © 2011-2022 走看看