zoukankan      html  css  js  c++  java
  • py 的 第 26 天

    ---恢复内容开始---

    1.约束

      

    class em(bb):
        def  send(self):
        pass   需求
    
    class bb(obj,x)   必须继承bb完成业务逻辑   抱枕派生类必须遵守send方法  x有几个参数下面也要有几个
        def  send(self)          写一个需求
            raise  exceptiom()         raise(抛出异常)
            raise  Notimplementederror (“。send()必须被重写”)
    
    o=em()
    fun(o)    
    

     java  c#  接口 就是类似功能   只能单继承,能实现多接口

    抽象类,抽象方法 约束继承他的所有的派生类,必须实现其中抽象方法   而抽象类中的普通方法,可以直接拿来用

    abstact class类  抽象类  py简单,直接写一个父类,需要他们写的方法 就在该方法下抛出异常,不需要的,直接写功能

    py抽象方法:

    from abc  import  ABCMetat,abstractmethod
    class a(metaclass=ABCMetat):   抽象类
        def f1(self):
        print(,)     正常写一个方法
        @abstractmethod
        def f2(self):     抽象方法
            pass
    class  foo(a):     这就必须写f2
        def f2(self):
            print(2)
    obj=foo()      如果不写f2实例化就报错
    obj。f1
    

     py一般不写抽象

    接口是一种数据类型,主要约束派生类中必须实现指定的方法。 py中不存在,java c#中有

    python用抽象类+抽象方法或人为主动抛出异常   编写上麻烦   跑出异常麻烦

    约束抛出异常异常可以用其他的,但是都不专业   raise notimplementederror(aaa)exception 不专业

    看别人代码,揣摩他的心思

    应用场景 1个类约束没毛用    1对多的时候用   多个类内部都要有某些方法时,需要使用基类+异常来约束。

    自定义异常

    1.如何自定义异常类

    class  aaa(exception):

      def __inint__(self,name)

        self.name=name

    try

           主动抛出异常

      raise myexception(1000)

    exception  myexception as  obj:  捕获异常

      print(obj。2222)

    exception  exception  as obj:  捕获所有异常  

      print(obj。1111)         

    加密

     首先引入一个函数import  hashlib

    实例化对象

    对象=hashlib。md5()      这里面传加盐(b‘xxx’)  b为了确保字节

    写入要加密的字节

    对象。update(“xxxx”                   。encode(‘utf-8’))

           这个必须是字节

    获取密文

    a=obj。 hexdigest()      

     print(a)

    密文的实用
    import  hashlib
    salt=b‘fasfasfasfsaf’             先把加盐拿出来,省的后面懵
    deg md5(pwd):
        obj=hashlib。md5(salt)     这就把盐当成一个变量使用了
        obj。update(pwd。encode(‘utf-8’))       这样pwd是个传参,可根据用户输入调节
        return obj。hexdigest()
    
    
    user=input(‘请输入用户名’)
    pwd=input(‘请输入密码’)
    if user==‘alex’ and pwd==加盐后的字符串
        print(成)
    else:
        print(sb)
    

     日志

    为什么要写日志,给开发人员看的排查错误,开发人员知道怎么写的怎么运行,客户不知道,容易出错

    import   logging
    logger = logging。basicconfig(filename=‘xxxxx。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(‘x2’)       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:
                    获取当前错误的堆栈信息
                    a=traceback。format_exc()这个就是告诉你在哪行,哪个文件的错误,十分具体
                   logging。error(a)   
                 logging。error(str(e))    这个str之后,把这个变量里边的东西编程字符串,写进去
    func()
    
    
    
    
    
    
    
    
    
    
    logging.basicConfig    实现打印日志的基本操作
    filename=路径名 
    format=格式化     以后方便存一些信息
    asctime=时间,什么时候出的错    name =谁运行的   levelname=错误的级别
    module =模块,哪个模块的问题      message  就是错误信息了
    datefmt=时间串
    level=级别   默认30                                        
    

     logging.basicConfig  只能设置一个,再写也不生效了

    ---恢复内容结束---

  • 相关阅读:
    如何在Windows,Linux下查看JAVA端口占用情况(阿里)
    Java超类-java.lang.object
    多线程-Thread的run()与start()的区别
    sleep、yield、wait、join的区别(阿里)
    SOA (面向服务的架构)-Service Oriented Architecture
    MySQL存储过程详解 mysql 存储过程
    navicat创建存储过程的小问题
    SVN使用教程
    #pragma的用法
    windows下远程连接Mysql
  • 原文地址:https://www.cnblogs.com/Mrszhao/p/9574727.html
Copyright © 2011-2022 走看看