1. 程式人生 > 實用技巧 >從linux原始碼看socket的close

從linux原始碼看socket的close

面向物件

面向過程

核心就是”過程“二字
過程的核心思想就是將程式流程化
過程是“流水線”,用來分步驟解決問題的

面向物件

核心是“物件”二字
物件是“容器”,用來盛放資料與功能的
物件的核心思想就是將程式“整合”

類也是“容器”,該容器用來存放同類物件共有的資料與功能

類中存放的是物件共有的資料與功能

類可以訪問
1.類的資料屬性是共享給所有物件用的,大家訪問的地址都一樣
2.類的函式屬性是繫結給物件用的 類呼叫自己的函式屬性必須嚴格按照函式的用法來
繫結方法的特殊之處在於:誰來呼叫繫結方法就會將誰當做第一傳入個引數自動

屬性訪問的語法

1.訪問資料屬性
	類名.__dict__['變數名']
2.訪問函式屬性
	類名.函式名

__init__方法

1.會在呼叫類時自動觸發執行,用來為物件初始化自己獨有的資料
2.__init__內應該存放的是為物件初始化屬性的功能,但是是可以存放任意其他程式碼 想要在類呼叫時就立即執行的程式碼都可以放到該方法內
3.__init__方法必須返回None

封裝:

1.將封裝的屬性進行隱藏操作
	如何隱藏:在屬性名前家__字首,就會實現一個對外隱藏性效果
        1、在類外部無法直接訪問雙下劃線開頭的屬性,但知道了類 名和屬性名就可以拼出名字:_類名__屬性名
           所以說這種操作並沒有什麼嚴格意義上地限制外部訪問,僅僅只是一種語法意義上的變形。
        2、這種隱藏對外不對內,因為__開頭的屬性會在檢查類體內程式碼語法時統一發生變形
        3、這種變形操作只在檢測類體語法的時候發生一次,之後定義的__開頭的屬性都不會變化

為何要隱藏:
	隱藏資料屬性:不讓外界直接引用,可以附加一系列條件的介面
	隱藏函式/方法屬性:不讓類外引用,只能在類內用

繼承:

繼承是一種建立新類的方式,新建的類可稱為子類或派生類,父類又可稱為基類或超類,子類會遺傳父類的屬性
Python支援多繼承
    在Python中,新建的類可以繼承一個或多個父類
    優點:子類可以同時遺傳多個父類的屬性,最大限度地重用程式碼
    缺點:1.違背了人的思維習慣
         2.程式碼的可讀性會變差
         3.不建議使用多繼承,有可能會引發菱形問題,擴充套件性變差
         如果真的涉及到一個子類不可避免地要重用多個父類的屬性,應該使用Mixins
    繼承表達的是一種什麼“是”什麼的關係
為何要用繼承:
    用來解決類與類之間程式碼冗餘問題

在子類派生的2新方法中如何重用父類的功能
    方式一:指名道姓呼叫某一個類下的函式=》不依賴繼承關係
    方式二:super()呼叫父類提供給自己的方法=》嚴格依賴繼承關係
        呼叫super()會得到一個特殊的物件該物件會參照當前的mro,去當前類的父類中找屬性

Python2中:

新式類:繼承了object類的子類,以及該子類的子類
經典類:沒有繼承object類的子類,以及該子類的子類

Python3中:

沒有繼承任何類,那麼會預設繼承object類,所以Python3中所有的類都是object類

反射機制:

指的是在程式執行過程中可以"動態"獲取物件的資訊實現反射機制的步驟
1.通過多dir:查看出某一個物件下可以.出來哪些屬性來
2.可以通過字串反射到真正得到屬性上,得到屬性值

四個內建函式的使用:

hasattr()判斷屬性是否存在
hasattr()獲取屬性
setattr()賦值屬性
delattr()解除屬性繫結

元類:

元類就是用來例項化產生類的類
	關係:元類----例項化----類----物件
type是內建的元類

檢視內建的元類:

我們用class關鍵字定義的所有的類以及內建的類都是由內建的元類type例項化的

class關鍵字:

類有三大特徵:
    1.類名
    2.類的基類
    3.執行類體程式碼拿到類的名稱空間

屬性查詢的原則:物件->類—>父類

異常處理:

異常是程式發生錯誤的訊號,程式一旦出錯就會丟擲異常,程式的執行隨機終止
異常處理的三個特徵:
    異常的追蹤資訊
    異常的型別
    異常的內容

如何處理異常:

語法上的錯誤:SyntaxError
    處理方式:必須在程式執行前就改正

邏輯上的錯誤:NameError,IndexError
    針對邏輯上的異常又分成兩種處理方式:
        錯誤發生的條件是可以預知的
        錯誤發生的條件是無法預知的

try:
    子程式碼塊 有可能會丟擲異常的程式碼
except 異常型別1 as e:
    pass
except 異常型別2 as e:
    pass
except Exception as e: 萬能異常
    pass
else:
    如果被檢測的子程式碼塊沒有發生,則會執行else的子程式碼
    else不能與try單獨使用
finally:不處理異常,無論是否發生異常都會執行finally的子程式碼無論被檢查的子程式碼塊有無異常發生,都會執行finally的子程式碼 應該把被檢測程式碼中回收系統資源的程式碼放到這