python全棧學習--面向對象進階3
復習:
#反射 必須會,必須能看的懂,必須知道在哪兒用
#hasattr getattr setattr delattr
內置方法 必須能看懂 能用盡量用
__len__len(obj)的結果依賴於obj.__len()__的結果,計算對象的長度
__hash__ hash(obj)的結果依賴於obj.__hash__()的結果,結算對象的hash值
__eq__ obj1 == obj2 的結果依賴於obj.__eq__()的結果,用來判斷相等
__str__ str(obj) print(obj) ‘%s‘%obj 的結果依賴於__str__,用來做輸出、顯示
__repr__ repr(obj) ‘%r‘%obj的結果依賴於__repr__,還可以做str的備胎
__format__ format() 的結果依賴於__format__的結果,是對象格式化的
__call__ obj() 相當於調用 __call__, 實現了__call__的對象是callable 的
__new__ 構造方法,在執行__init__之前執行,負責創建一個對象,在單例模式中有具體的應用
__del__ 析構方法,在對象刪除的時候,刪除這個對象之前執行,主要用來關閉在對象中打開的系統資源
class A: def __getitem__(self, item): print(item) a = A()
__getitem__ 對象[]的新式對對象進行增刪改查
__setitem__
__delitem__
__delattr__ del obj.attr 用來自定義刪除一個屬性的方法
只有一個對象,只開了一個內存空間
創建一個類 單例模式中的對象屬性編程類中的靜態屬性,所有的方法變成類方法
設計模式---java
python中的單例模式 是使用__new__
python
顯示一個對象中的所有a開頭的屬性
二,模塊
py文件就是模塊
python之所以好用,模塊多
三種
1.內置模塊
python安裝的時候自帶的
2.擴展模塊
例如:
itchat
beautiful soap
selenium 網頁自動化測試工具
django tornado
3.自定義模塊
內置模塊
序列化模塊
hashlib 模塊
序列化模塊
能存儲在文件中的一定是字符串,或者是字節
能在網絡上傳輸的 只有字節
dic = {"層數":(90,23)} print(str(dic)) print(str(dic).encode(encoding=‘utf-8‘))
##註意上面中文才會顯示下方 \xe5........
dic = {"層數":(90,23)} print(str(dic)) print(str(dic).encode(encoding=‘utf-8‘)) b"{‘\xe5\xb1\x82\xe6\x95\xb0‘: (90, 23)}" s = b"{‘\xe5\xb1\x82\xe6\x95\xb0‘: (90, 23)}" res = s.decode(encoding=‘utf-8‘) print(res)
# dic --> 字符串 序列化
#字符串 --> dic 反序列化
#序列化 == 創造一個序列 ==》創造一個字符串
#實例化 == 創造一個實例
import json #序列化 dic = {"john":(190,90)} ret = json.dumps(dic,ensure_ascii=False) print(type(dic),dic) print(type(ret),ret) print(‘*‘,str(dic)) #土辦法 #反序列化 res = json.loads(ret) print(type(res),res)
執行輸出:
f = open(‘john‘,‘r‘,encoding=‘utf-8‘) ret = json.load(f) print(type(ret),ret)
執行輸出
dump 序列化 load反序列化 主要用於一個數據直接存在文件裏直接和文件打交道
dumps序列化 loads反序列化 只在內存中操作數據 主要用於網絡傳輸和多個數據與文件打交道
import pickle
python全棧學習--面向對象進階3