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

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  只能设置一个,再写也不生效了

 

 

 

 

 

 

 

 

 

 

 

 

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