面向对象
约束
class BaseMessage(object): def send(self): """ 必须继承BaseMessage,然后其中必须编写send方法.用于完成具体业务逻辑 """ raise NotImplementedError(".send() 必须被重写") #raise Exception(".send() 必须被重写") BaseMessage 类用于约束,约束其派生类:保证派生类中必须编写send方法,不然执行可能会报错
Python的约束:
Python的约束主要通过抽象类和主动抛出异常来实现
接口:
接口是一种数据类型,接口中不允许在方法内部写代码,只能约束继承它的类必须实现接口中定义的所有方法.
抽象类:
from abc import ABCMeta, abstractmethod class Base(metaclass=ABCMeta): def f1(self): print("正常方法") @abstractmethod def f2(self): print("抽象方法") class Foo(Base): def f2(self): print(666)
自定义异常
class Base: """ 必须继承Base,然后必须编写其中的f1方法 """ def f1(self, a1): raise NotImplementedError("相应的提示信息") class Foo(Base): def f1(self, a1): pass
hashlib:
主要用于加密(md5),为了防止撞库,所以一定要加盐,因为加密后不可以反解,因此进行校对时可以使用密文进行,还需注意的是md5加密的是字节,所以需要用encode进行编码
import hashlib salt = b"asdfghjkl;ei" def func(pwd): # 实例化对象 obj = hashlib.md5(salt) # 写入加密字节 obj.update(pwd.encode("utf-8")) # 获取密文 return obj.hexdigest() name = input(">>>") pwd = input(">>>") if name == "123" and func(pwd) == "fb5e8b7ebcd71d0ac0ecf803ff8aba74": print("登陆成功")
logging:日志文件
logger = logging.basicConfig(filename='xxxxxxx.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') # 自定义日志 logging.error('x4')
获取当前错误的堆栈信息
import traceback def func(): try: a = a +1 except Exception as e: # 获取当前错误的堆栈信息 msg = traceback.format_exc() logging.error(msg) func()
import logging # 创建一个操作日志的对象logger(依赖FileHandler) file_handler = logging.FileHandler('log1.log', 'a', encoding='utf-8') file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) logger1 = logging.Logger('s1', level=logging.ERROR) logger1.addHandler(file_handler) logger1.error('1') # 在创建一个操作日志的对象logger(依赖FileHandler) file_handler2 = logging.FileHandler('log2.log', 'a', encoding='utf-8') file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) logger2 = logging.Logger('s2', level=logging.ERROR) logger2.addHandler(file_handler2) logger2.error('2')