2020-02-19python高手之路學習隨筆(3)

第三章 管理API變化

在python中用下劃線作私有API的前綴,比如_foo就是私有API, foo這種則是公有API

當決定修改API的時候要通過文檔對修改進行詳細地記錄,包括:
1 記錄新的接口API
2 記錄廢棄的舊接口
3 記錄如何升級到新接口
4舊API不要直接刪除,等到維護實在太麻煩的時候再刪除

一般情況下使用""" 或者# 添加注釋隊API進行說明,不過一般情況下,用戶很少會去看底層的API注釋。
更近一步的是使用名為warnings 模塊,來對控制臺進行強制輸出提示

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import warnings

class Car(object):
    def turn_left(self):

        warnings.warn("測試,看看就知道了",DeprecationWarning)

        self.turn(direction="left")

    def turn(self,direction):

        pass


from lianxi2 import Car
c=Car()
c.turn_left()

按書上代碼 理論上應該出信息,但是再python2.7之后的版本里面,DeprecationWarning,PendingDeprecationWarning,ImportWarning都已經(jīng)被默認屏蔽了,如果想看見需要再控制臺的情況下輸入python -W all。
一般這個辦法不靠譜,推薦直接使用warnings的基類warnings.warn("測試,看看就知道了",Warning)
附上warnings的錯誤異常

類 描述

Warning 這是所有警告類別類的基類。它是Exception的一個子類。

UserWarning warn()的默認類別。

DeprecationWarning 有關不推薦使用的功能的警告的基本類別(默認情況下被忽略)。

SyntaxWarning 基本類別,用于警告關于可疑語法特征的警告。

RuntimeWarning 有關可疑運行時功能的警告的基本類別。

FutureWarning 關于構造的警告的基本類別將在未來語義上發(fā)生變化。

PendingDeprecationWarning 基本類別,用于警告將來不推薦使用的功能(默認情況下會被忽略)。

ImportWarning 在導入模塊的過程中觸發(fā)警告的基本類別(默認情況下會被忽略)。

UnicodeWarning 與Unicode相關的警告的基本類別。

如果想撤銷警告可以使用

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

在上下文管理器中,所有的警告都將被忽略。這使您可以使用已知不推薦的代碼,而不必查看警告,同時不抑制其他可能不知道其使用棄用代碼的代碼的警告。注意:這只能在單線程應用程序中保證。如果兩個或更多線程同時使用catch_warnings上下文管理器,則行為是未定義的。
另一點 再控制臺運行 python -W error 可以把這些警告全部轉化為異常 跳出
比如:

python -W error 
>>> import warnings
>>> warnings.warn("測試測試")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UserWarning: 測試

書上提供了另一個庫debtcollector。

from debtcollector import moves
class Car(object):
    @moves.moved_method("turn",version="1.1")
    def turn_left(self):
        """

        Trun the car left
        """

        self.turn(direction="left")

    def turn(self,direction):

        pass

理論上這玩意是通過裝飾器來操作的。看著感覺簡單,但是感覺并沒有warnings好用,如果使用這個庫,會讓代碼耦合性太高吧?

本章總結
1設計API要使用簡單,同時api 變化最好是不變的情況下修改內(nèi)容。
2API最好是趨于一致性
3編寫文檔,實時的
4簡單實現(xiàn),優(yōu)化代碼

高手之路第三章管理API變化學習完畢,感覺這章更多的是教學的API的設計思路,更API設置的時候插入警告。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 目錄: 安裝及入門 使用和調(diào)用方法 原有TestSuite使用方法 斷言的編寫和報告 Pytest fixture...
    韓志超閱讀 6,177評論 1 5
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,203評論 0 3
  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,217評論 1 13
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 16,208評論 2 11
  • 去年有段時間得空,就把谷歌GAE的API權威指南看了一遍,收獲頗豐,特別是在自己幾乎獨立開發(fā)了公司的云數(shù)據(jù)中心之后...
    騎單車的勛爵閱讀 21,116評論 0 41

友情鏈接更多精彩內(nèi)容