国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python的PEAK來適配協議的教程

2020-02-23 00:44:13
字體:
來源:轉載
供稿:網友

如果您正嘗試去處理元類,或者正受困于 Twisted 中的異步編程,或者正在研究由于使用了多分派而使您精疲力盡的面向對象編程,那么您完全錯了!PEAK 將所有這些中的一些要素組合到了一個組件編程框架中。PEAK 還存在一些小問題。類似于 Twisted,PEAK 的文檔 -- 盡量數量巨大 -- 難以看懂。但是盡管如此,關于 Python 領袖 Phillip J. Eby 領導的這一項目還是有一些東西非常值得關注;而且,我覺得,有機會進行極具生產價值的并且層次特別高的應用程序開發。

PEAK 包由許多不同用途的子包組成。一些重要的子包是 peak.api、 peak.binding、 peak.config、 peak.naming 和 peak.storage 。那些名字大部分是自我解釋性的。子包 peak.binding 用于組件間的靈活連接; peak.config 讓您可以存儲“很少改變的(lazily immutable)”數據,這些數據與聲明性應用程序(declarative application )編程有關; peak.naming 讓您可以為(網絡的)資源創建全局惟一的標識符; peak.storage 顧名思義讓您可以管理數據庫和持久內容。

不過,對本文來說,我們將關注的是 peak.api 。特別是 PyProtocols 包,它可以單獨獲得并為其他 PEAK 子包提供一個基礎設施。在 peak.api.protocols 中包括了 PyProtocols 包的一個版本。不過現在我所感興趣的是研究一個獨立的 protocols 包。在以后的部分,我將返回來討論 PEAK 其他部分的話題。
什么是協議?


抽象地說,協議只是對象同意遵循的一組行為。強類型(Strongly-typed)編程語言 -- 包括 Python -- 都有一個基本類型的集合,每個基本類型都有一組得到保證的行為:Integer 知道如何去求它們自己的乘積;list 知道如何去遍歷它們的內容;dictionary 知道如何根據一個關鍵字找到相應的值;file 知道如何去讀和寫字節;諸如此類。您可以預期的內置類型的行為集合構成了它們實現的一個 協議。對協議進行系統化的對象被稱為 接口(interface)。

對標準的類型而言,將實現的所有行為全部列出并不太困難(盡管不同的 Python 版本之間會稍有不同;或者,不同的編程語言之間當然會有差別)。但是,在邊界 -- 對于屬于自定義類的對象來說 -- 難以聲明最終是什么構成了“類-dictionary”或“類-file”的行為。大部分情況下,只實現了比如內置的 dict 類型的方法的一個子集 -- 甚至是相當小的子集 -- 的自定義對象,就足夠“類-dictionary”而可以滿足當前的要求。不過,能顯式地整理出一個對象要用到的函數、模塊、類或者框架中需要能夠做哪些事情,將是很吸引人的。那就是 PyProtocols 包所做到的(一部分)。

在具有靜態類型聲明的編程語言中,為了在新的上下文中使用數據,您通常需要將其自一個類型 強制類型轉換(cast)或者 轉換(convert)到另一個類型。在其他語言中,轉換根據上下文的需要隱式地進行,這些被稱為 強迫同型(coercions)。Python 中既有強制類型轉換也有強迫同型,通常使用更多的是前者(“顯式優于隱式”)。您可以將向一個浮點數加到一個整型數,結果得到一個更為通用的浮點數;但是如果您希望將字符串 "3.14" 轉換為一個數字,那么您需要使用顯式的構造函數 float("3.14") 。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘孜| 黄浦区| 留坝县| 塔城市| 洪湖市| 奈曼旗| 伽师县| 锡林郭勒盟| 房产| 宁津县| 抚宁县| 龙游县| 恭城| 花莲市| 赤水市| 岳阳市| 兴宁市| 涟源市| 广丰县| 三穗县| 绥滨县| 城市| 景宁| 天台县| 周口市| 延安市| 哈巴河县| 麻城市| 宜良县| 时尚| 华池县| 黑河市| 溆浦县| 肇源县| 左权县| 晴隆县| 广灵县| 广丰县| 松阳县| 镇赉县| 松阳县|