第三模塊--不會的知識點整理
阿新 • • 發佈:2018-09-23
返回 序列 包括 clas 9.1 實現 廣度 反射 上傳下載
1、繼承的實現原理:深度優先,廣度優先
print(F.__mro__)
2、組合指,在一個類中以另外一個類的對象作為數據屬性
3、抽象類:從一堆類中抽取相同的內容而來的,包括數據屬性和函數屬性,只能被繼承,不能被實例化,------歸一化設計
import abc class All_file(metauclass=abc.ABCmeta): all_file=‘file‘ @abc.abctractmethod def read(self): pass
4、封裝的概念
5、多次序列化到文件,讀取出來是怎麽樣
6、instance(obj,cls)檢查是否obj是類cls的對象
7、反射的概念
8、元類的概念
9、網絡編程中解決粘包問題的兩種形式:
9.1、遠程執行服務端系統命令:
(1)引入subprocess模塊與系統交互---引入管道的知識
(2)引入struct模塊,先發報頭的長度,再發報頭(客戶端根據接受完整的報頭得到裏面存儲的文件長度)
obj = subprocess.Popen(cmd.decode(‘utf-8‘), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout=obj.stdout.read() # 字節類型 stderr=obj.stderr.read() # 字節類型
#3、把命令的結果返回給客戶端 #第一步:制作固定長度的報頭 header_dic={ ‘filename‘:‘a.txt‘, ‘md5‘:‘xxdxxx‘, ‘total_size‘: len(stdout) + len(stderr) # 字節的長度 -------- 文件的大小 } header_json=json.dumps(header_dic) header_bytes=header_json.encode(‘utf-8‘) #第二步:先發送報頭的長度 conn.send(struct.pack(‘i‘,len(header_bytes))) # len(header_bytes)發送信息給客戶端的字節長度 #第三步:再發報頭 conn.send(header_bytes) # 客戶端發兩次 #第四步:再發送真實的數據 conn.send(stdout) conn.send(stderr)
可以直接打包 發送數據的長度-----客戶端解壓依次即可
也可以間接發送數據的長度 先發head_dic報頭長度,再發報頭,,客戶端解壓報頭 得到報頭裏面的數據長度
9.2、上傳下載文件os.path.getsize(pt_path),文件的大小--字節的長度 --<class ‘int‘>
file_size = os.path.getsize(pt_path)
print(file_size,type(file_size))
290 <class ‘int‘>
第三模塊--不會的知識點整理