1.如何理解設計模式
在IT行業有很多前輩針對固定的一些問題設計出了固定的解決套路。
設計模式總共有23種。
設計模式的分類:創建型;結構型;行為型。
2.設計模式之單例模式
類加括號調用多次只允許產生一個對象。
(1)引出:正常情況下,類名只要加括號實例化產生對象,執行幾次就會產生幾個不同的對象。class MyClass: pass obj1 = MyClass() obj2 = MyClass() obj3 = MyClass() print(id(obj1),id(obj2),id(obj3)) ''' 2962171860192 2962171860752 2962171860640 '''
(2)如果產生的地方特別多,那麼會浪費一定的內存空間,所以引出單例。
(3)單例方法之使用元類干預對象的創建過程
class MyMeTaClass(type): # 記錄類是否已經創建了對象 instance = None def __call__(self, *args, **kwargs): if self.instance: return self.instance # 獲取空對象 obj = super().__call__(*args, **kwargs) # 保存對象 self.instance = obj # 返回空對象 return obj class Single(metaclass=MyMeTaClass): def __init__(self, name): self.name = name obj1 = Single('jason') obj2 = Single('kevin') obj3 = Single('tony') print(id(obj1), id(obj2), id(obj3)) ''' 2578464315768 2578464315768 2578464315768 ''' print(obj1.name) # jason print(obj2.name) # jason print(obj3.name) # jason
(4)單例方法之定義一個裝飾器實現
import settings def singleton(cls): #cls=Mysql _instance=cls(settings.HOST,settings.PORT) def wrapper(*args,**kwargs): if args or kwargs: obj=cls(*args,**kwargs) return obj return _instance return wrapper @singleton # Mysql=singleton(Mysql) class Mysql: def __init__(self,host,port): self.host=host self.port=port obj1=Mysql() obj2=Mysql() obj3=Mysql() print(obj1 is obj2 is obj3) #True obj4=Mysql('1.1.1.3',3307) obj5=Mysql('1.1.1.4',3308) print(obj3 is obj4) #False
1.什麼是pickle模塊
pickle模塊使用的數據格式是python專用的,能夠把Python對象直接保存到文件,而不須要把他們轉化為字符串,也不用底層的文件訪問操作把它們寫入到一個二進制文件中。
2.pickle模塊中常用函數
(1)pickle.dump(obj, file, [,protocol])
功能:接受一個文件句柄和一個數據對象作為參數,把數據對象obj以特定的格式保存到給定的文件file裡。import pickle l1=[1,2,3,4,5] t1=(1,2,3,4,5) dic1={ "k1":"v1","k2":"v2","k3":"v3"} #把列表l1序列化進一個文件f1中 with open("f1","wb") as f: pickle.dump(l1,f) pickle.dump(t1,f) pickle.dump(dic1,f) 序列化後在當前目錄下生成一個f1文件,打開文件f1可以看到一堆亂碼,如下所示: €]q (KKKKKe.€(KKKKKtq .€}q (X k1qX v1qX k2qX v2qX k3qX v3qu.
(2)pickle.load(file)
功能:將file中的對象序列化讀出。import pickle #序列化到文件 obj = 123, "abcdedf", ["ac", 123], { "key": "value", "key1": "value1"} print(obj) #wb 讀寫到二進制文件 f = open("./a.txt",'wb') pickle.dump(obj,f) f.close() f = open("./a.txt",'rb') print(pickle.load(f)) f.close()
(3)pickle.dumps(obj[, protocol])
功能:將obj對象序列化為string形式,而不是存入文件中。import pickle ls = ['12', '34', '56'] # dumps 將數據通過特殊的形式轉換為只有python語言認識的字符串 str = pickle.dumps(ls) print(str)
(4)pickle.loads(string)
功能:從string中讀出序列化前的obj對象。import pickle # loads 將pickle數據轉換為python的數據結構 ls = ['12', '34', '56'] str = pickle.dumps(ls) mes = pickle.loads(str) print(mes) ['aa', 'bb', 'cc']
功能分析
(1)管理員功能(最核心)
1.注冊
2.登錄
3.創建講師
4.創建學校
5.創建課程(2)講師功能
1.注冊
2.登錄
3.選擇教授課程
4.查看教授課程
5.管理課程分數(3)學生功能
1.注冊
2.登錄
3.選擇學校
4.選擇課程
5.查看分數
三層架構
(1)功能展示層
src.py
admin_view.py
teacher_view.py
student_view.py(2)核心邏輯層
admin_interface.py
teacher_interface.py
student_interface.py(3)數據處理層
db_hanlder.py
model.py