1. 程式人生 > >python全棧學習--面向對象進階3

python全棧學習--面向對象進階3

pic load 靜態 序列化 字符 tor 屬性 brush 模式

復習:

#反射 必須會,必須能看的懂,必須知道在哪兒用

#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