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