class BaseMessage(object): def send(self): """ 必須繼承BaseMessage,而後其中必須編寫send方法.用於完成具體業務邏輯 """ raise NotImplementedError(".send() 必須被重寫") #raise Exception(".send() 必須被重寫") BaseMessage 類用於約束,約束其派生類:保證派生類中必須編寫send方法,否則執行可能會報錯
Python的約束主要經過抽象類和主動拋出異常來實現ide
接口是一種數據類型,接口中不容許在方法內部寫代碼,只能約束繼承它的類必須實現接口中定義的全部方法.編碼
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
主要用於加密(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("登錄成功")
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')
獲取當前錯誤的堆棧信息spa
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')