天天看點

《Python面向對象程式設計指南》——導讀

《Python面向對象程式設計指南》——導讀

本書主要介紹python語言的進階特性,特别是如何編寫高品質的python程式。這通常意味着編寫高性能且擁有良好可維護性的程式。同時,我們也會探究不同的設計方案并确定究竟是哪種方案提供了最佳性能。而對于一些正在尋找解決方案的問題,這也是一種很好的方式。

本書的大部分内容将介紹一種給定設計的不同替代方案。一些方案性能更好,另一些方案更加簡單或者更加适合于特定領域的問題。最重要的是,找到最好的算法和最優的資料結構,以最少的開銷換取最大的價值。時間就是金錢,高效的程式會為它們的使用者創造更多的價值。

python的很多内部特性都可以直接被應用程式所使用。這意味着,我們的程式可以與python現有的特性非常好地整合。充分利用這些python特性,可以讓我們的面向對象設計整合得很好。

我們經常會為一個問題尋找多種不同的解決方案。當你評估不同的算法和資料結構時,通常會設計幾種不同的方案,它們在性能和記憶體的使用上不盡相同。通過評估不同的方案,最終合理地優化應用程式,這是一種重要的面向對象設計技巧。

本書一個更為重要的主題是,對于任何問題,沒有所謂的唯一且最好的方法。相反,會有許多不同的方案,而這些方案也各有優劣。

關于程式設計風格的主題非常有趣。敏銳的讀者會注意到,在一些非常細微的部分,例如在名稱選擇和符号的使用上,并非所有的例子都完全符合pep-8。

随着你能夠越來越熟練地以面向對象的方式使用python,也将不得不花大量的時間去閱讀各種python源碼。你會發現,甚至在python标準庫的子產品中,都有很大的可變性。相比于展示完全一緻的例子,我們更傾向于去關注那些不一緻的部分,正如我們在各種開源項目中所看到的,一緻性的缺乏,正是對代碼更好的認可。

[第1部分 用特殊方法實作python風格的類

第1章 __init__()方法

<a href="https://yq.aliyun.com/articles/93313/">1.2 基類中的__init__()方法</a>

<a href="https://yq.aliyun.com/articles/93316/">1.3 在基類中實作init()方法</a>

<a href="https://yq.aliyun.com/articles/93320/">1.4 使用__init()__方法建立常量清單</a>

<a href="https://yq.aliyun.com/articles/93334/">1.5 通過工廠函數調用__init()__</a>

1.5.1 錯誤的工廠設計和模糊的else語句

1.5.2 使用elif簡化設計來獲得一緻性

1.5.3 使用映射和類來簡化設計

<a href="https://yq.aliyun.com/articles/93339/">1.6 在每個子類中實作__init()__方法</a>

<a href="https://yq.aliyun.com/articles/93345/">1.7 簡單的組合對象</a>

1.7.1 封裝集合類

1.7.2 擴充集合類

1.7.3 可适應更多需求的另一種設計

<a href="https://yq.aliyun.com/articles/93348/">1.8 複合的組合對象</a>

<a href="https://yq.aliyun.com/articles/93352/">1.9 不帶__init__()方法的無狀态對象</a>

<a href="https://yq.aliyun.com/articles/93357/">1.10 一些其他的類定義</a>

<a href="https://yq.aliyun.com/articles/93361/">1.11 多政策的__init__()方法</a>

1.11.1 更複雜的初始化方式

1.11.2 靜态函數的初始化

<a href="https://yq.aliyun.com/articles/93382/">1.12 更多的__init__()技術</a>

1.12.1 帶有類型驗證的初始化

1.12.2 初始化、封裝和私有化

<a href="https://yq.aliyun.com/articles/93383/">1.13 總結</a>

[第2章 與python無縫內建——基本特殊方法

2.1.1 非集合對象的__str__()和__repr__()

2.1.2 集合中的__str__()和__repr__()

<a href="https://yq.aliyun.com/articles/93415/">2.2 __format__()方法</a>

2.2.1 内嵌格式規範

2.2.2 集合和委托格式規範

<a href="https://yq.aliyun.com/articles/93428/">2.3 __hash__()方法</a>

2.3.1 決定哈希的對象

2.3.2 有關不可變對象和繼承的預設行為

2.3.3 重載不可變對象

2.3.4 重載可變對象

2.3.5 從可變的hand類中生成一個不可變的hand類

<a href="https://yq.aliyun.com/articles/93435/">2.4 __bool__()方法</a>

<a href="https://yq.aliyun.com/articles/93442/">2.5 __bytes__()方法</a>

<a href="https://yq.aliyun.com/articles/93451/">2.6 比較運算符方法</a>

2.6.1 設計比較運算

2.6.2 實作同一個類的對象比較

2.6.3 實作不同類的對象比較

2.6.4 硬總和、軟總和和多态

2.6.5 不同類比較的例子

<a href="https://yq.aliyun.com/articles/93457/">2.7 __del__()方法</a>

2.7.1 引用計數和對象銷毀

2.7.2 循環引用和垃圾回收

2.7.3 循環引用和weakref子產品

2.7.4 __del__()和close()方法

<a href="https://yq.aliyun.com/articles/93459/">2.8 __new__()方法和不可變對象</a>

<a href="https://yq.aliyun.com/articles/93467/">2.9 new()方法和元類型</a>

2.9.1 元類型示例1——有序的屬性

2.9.2 元類型示例2——自引用

<a href="https://yq.aliyun.com/articles/93469/">2.10 總結</a>

第3章 屬性通路、特性和修飾符

第4章 抽象基類設計的一緻性

第5章 可調用對象和上下文的使用

第6章 建立容器和集合

第7章 建立數值類型

第8章 裝飾器和mixin——橫切方面

第2部分 持久化和序列化

第9章 序列化和儲存——json、yaml、pickle、csv和xml

第10章 用shelve儲存和擷取對象

第11章 用sqlite儲存和擷取對象

第12章 傳輸和共享對象

第13章 配置檔案和持久化

第3部分 測試、調試、部署和維護

第14章 logging和warning子產品

第15章 可測試性的設計

第16章 使用指令行

第17章 子產品和包的設計

第18章 品質和文檔