面向对象

约束

class BaseMessage(object):
    def send(self):
        """
        必须继承BaseMessage,然后其中必须编写send方法.用于完成具体业务逻辑
        """
        raise NotImplementedError(".send() 必须被重写")
        #raise Exception(".send() 必须被重写")


BaseMessage 类用于约束,约束其派生类:保证派生类中必须编写send方法,不然执行可能会报错
View Code

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("登陆成功")
View Code

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()
View Code
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')
自定义日志
原文地址:https://www.cnblogs.com/wangjun187197/p/9579040.html