第三章 管理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設置的時候插入警告。