1.約束
class BaseMessage(object): def send(self,x1): """ 必須繼承BaseMessage,然後其中必須編寫send方法。用於完成具體業務邏輯。 """ raise NotImplementedError(".send() 必須被重寫.")
class Email(BaseMessage):
def send(self,x1):
"""
必須繼承BaseMessage,然後其中必須編寫send方法。用於完成具體業務邏輯。
"""
pass
obj = Email()
obj.send(1)
開頭定義一個約束函式,宣告後邊函式所使用的方法,主動拋異常raise NotImplementedError("方法(), ")
抽象類和抽象方法的約束
介面中不允許寫程式碼,只能約束,繼承他的類,必須實現介面中定義的所有方法
Java中:interface Foo:
def f1(self,x1):pass#表示類中必須繼承f1方法。可以實現多個介面。
###抽象類,約束繼承他的派生類必須實現它其中的抽象方法
abstact class Foo:
def f1(self):
print(1,3,4)
abstact def f2(self):pass#抽象方法
class Bar(Foo):
def f2(self):
print(123)
###Bar繼承了Foo,就必須繼承他的抽象方法,但是抽象類中的正常方法f1可以不用繼承
python中的抽象類和抽象方法:
from abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta):#抽象類 def f1(self): print(123) @absabstractmethod#抽象方法 def f2(self): pass class Foo(Base): def f2(self): print(666) obj = Foo() obj.f1() obj.f2()
總結:
1.什麼是介面以及作用?
是一種資料型別,主要用與約束派生類中必須實現的指定方法,python中沒有,Java和c#存在
2.python中使用什麼來約束?
抽象類+抽象方法 編寫上比較麻煩。
人為的主動丟擲異常
3.約束時,丟擲的異常可以使用其他方法
專業的寫法:raise NotImplementedError(".send() 必須被重寫.")
4.應用場景:多個類,內部必須有某些方法是是,需要使用基類加異常進行約束。
自定義異常:
以前的方法:
try:
a=a1
except Exception as e:
print(e)
函式方法:
在檔案中找關鍵字prev
import os def func(path,prev) response={"colde":1000,"data:None} try: if not os.path.exists(path): response["code"]=1001 response["data"]="檔案不存在" return response if onto prev: response["code"]=1002 response["data"]="關鍵字為空" return response except Exception as e : response["code"]=1003 response["data"]="未知錯誤" return response
物件導向 import os class ExistsError(Exception): pass class KeyInvalidError(Exception): pass def new_func(path,prev): """ 去path路徑的檔案中,找到字首為prev的一行資料,獲取資料並返回給呼叫者。 1000,成功 1001,檔案不存在 1002,關鍵字為空 1003,未知錯誤 ... :return: """ response = {'code':1000,'data':None} try: if not os.path.exists(path): raise ExistsError() if not prev: raise KeyInvalidError() pass except ExistsError as e: response['code'] = 1001 response['data'] = '檔案不存在' except KeyInvalidError as e: response['code'] = 1002 response['data'] = '關鍵字為空' except Exception as e: response['code'] = 1003 response['data'] = '未知錯誤' return response
加密:
引入hashlib模組(幫助加密)
obj=hashilb.md5(b"fhfshsjhjksd")#加鹽
obj.update("admin".enode("utf-8))
v=obj.hexdigest()
print(v)
為防止撞庫,使用加鹽
日誌:
引入模組logging
import logging logger =logging.basicConfig(filename='日誌.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("2")#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 :#獲取到堆疊資訊 msg=traceback.format_exc() logging.error(msg) func()