---恢复内容开始---
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 只能设置一个,再写也不生效了
---恢复内容结束---