zoukankan      html  css  js  c++  java
  • 面向对象 约束、自定义异常、加密

    1.约束

    class BaseMessage(object):
        def send(self,x1):
            """
            必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
            """
            raise NotImplementedError(".send() 必须被重写.")
    class Email(BaseMessage):
    def send(self,x1):
    """
    必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
    """
    pass


    obj = Email()
    obj.send(1)

    开头定义一个约束函数,声明后边函数所使用的方法,主动抛异常raise NotImplementedError("方法(),   ")

    抽象类和抽象方法的约束

    接口中不允许写代码,只能约束,继承他的类,必须实现接口中定义的所有方法

    Java中:interface  Foo:

          def f1(self,x1):pass#表示类中必须继承f1方法。可以实现多个接口。

    ###抽象类,约束继承他的派生类必须实现它其中的抽象方法

    abstact class Foo:

      def f1(self):

        print(1,3,4)

      abstact def f2(self):pass#抽象方法

    class Bar(Foo):

      def f2(self):

        print(123)

    ###Bar继承了Foo,就必须继承他的抽象方法,但是抽象类中的正常方法f1可以不用继承

    python中的抽象类和抽象方法:

    from abc import ABCMeta,abstractmethod
    class Base(metaclass=ABCMeta):#抽象类
        
        def f1(self):
            print(123)
        @absabstractmethod#抽象方法
        def f2(self):
            pass
    
    class Foo(Base):
         def f2(self):
            print(666)
    obj = Foo()
    obj.f1()
    obj.f2()

    总结:

    1.什么是接口以及作用?

    是一种数据类型,主要用与约束派生类中必须实现的指定方法,python中没有,Java和c#存在

    2.python中使用什么来约束?

    抽象类+抽象方法  编写上比较麻烦。

    人为的主动抛出异常

    3.约束时,抛出的异常可以使用其他方法

    专业的写法:raise NotImplementedError(".send() 必须被重写.")

    4.应用场景:多个类,内部必须有某些方法是是,需要使用基类加异常进行约束。

    自定义异常:

    以前的方法:

    try:

    a=a1

    except Exception as e:

      print(e)

    函数方法:

    在文件中找关键字prev
    import os
    def func(path,prev) response={"colde":1000,"data:None} try: if not os.path.exists(path): response["code"]=1001 response["data"]="文件不存在" return response if onto prev: response["code"]=1002 response["data"]="关键字为空" return response except Exception as e : response["code"]=1003 response["data"]="未知错误" return response
    面向对象
    import os
    
    
    class ExistsError(Exception):
        pass
    
    class KeyInvalidError(Exception):
        pass
    
    def new_func(path,prev):
        """
        去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
            1000,成功
            1001,文件不存在
            1002,关键字为空
            1003,未知错误
            ...
        :return:
        """
        response = {'code':1000,'data':None}
        try:
            if not os.path.exists(path):
                raise ExistsError()
    
            if not prev:
                raise KeyInvalidError()
            pass
        except ExistsError as e:
            response['code'] = 1001
            response['data'] = '文件不存在'
        except KeyInvalidError as e:
            response['code'] = 1002
            response['data'] = '关键字为空'
        except Exception as e:
            response['code'] = 1003
            response['data'] = '未知错误'
        return response

    加密:

    引入hashlib模块(帮助加密)

    obj=hashilb.md5(b"fhfshsjhjksd")#加盐

    obj.update("admin".enode("utf-8))

    v=obj.hexdigest()

    print(v)

    为防止撞库,使用加盐

    日志:

    引入模块logging

    import logging
    logger =logging.basicConfig(filename='日志.txt',
                                 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                                 datefmt='%Y-%m-%d %H:%M:%S',
                                 level=30)
    logging.debug("x1")#10
    logging.info("2")#20
    logging.warning("x3")#30
    logging.error("x4")#40
    logging.critical("x5")#50
    # # logging.log(10,"x6")
    import traceback******************************
    def func():
        try:
            a=a+1
        except Exception as e :#获取到堆栈信息
            msg=traceback.format_exc()
            logging.error(msg)
    func()
  • 相关阅读:
    [转]Extundelete--数据恢复软件
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/wqzn/p/9568580.html
Copyright © 2011-2022 走看看