面向?qū)ο蠡A(chǔ)
基礎(chǔ)內(nèi)容介紹詳見一下兩篇博文:
其他相關(guān)
一、isinstance(obj, cls)
檢查obj是否是類 cls 的對象
1 2 3 4 5 6 | class Foo( object ):
pass
obj = Foo()
isinstance (obj, Foo)
|
二、issubclass(sub, super)
檢查sub類是否是 super 類的派生類
1 2 3 4 5 6 7 | class Foo( object ):
pass
class Bar(Foo):
pass
issubclass (Bar, Foo)
|
三、異常處理
1、異?;A(chǔ)
在編程過程中為了增加友好性,在程序出現(xiàn)bug時一般不會將錯誤信息顯示給用戶,而是現(xiàn)實一個提示的頁面,通俗來說就是不讓用戶看見大黃頁?。?!
1 2 3 4 | try :
pass
except Exception as ex:
pass
|
需求:將用戶輸入的兩個數(shù)字相加

View Code
2、異常種類
python中的異常種類非常多,每個異常專門用于處理某一項異常?。。?/p>

常用異常

更多異常

實例IndexError

實例KeyError

實例ValueError
對于上述實例,異常類只能用來處理指定的異常情況,如果非指定異常則無法處理。
1 2 3 4 5 6 7 | # 未捕獲到異常,程序直接報錯
s1 = 'hello'
try :
int (s1)
except IndexError as e:
print e
|
所以,寫程序時需要考慮到try代碼塊中可能出現(xiàn)的任意異常,可以這樣寫:
1 2 3 4 5 6 7 8 9 | s1 = 'hello'
try :
int (s1)
except IndexError as e:
print e
except KeyError as e:
print e
except ValueError as e:
print e
|
萬能異常 在python的異常中,有一個萬能異常:Exception,他可以捕獲任意異常,即:
1 2 3 4 5 | s1 = 'hello'
try :
int (s1)
except Exception as e:
print e
|
接下來你可能要問了,既然有這個萬能異常,其他異常是不是就可以忽略了!
答:當然不是,對于特殊處理或提醒的異常需要先定義,最后定義Exception來確保程序正常運行。
1 2 3 4 5 6 7 8 9 | s1 = 'hello'
try :
int (s1)
except KeyError as e:
print '鍵錯誤'
except IndexError as e:
print '索引錯誤'
except Exception as e:
print '錯誤'
|
3、異常其他結(jié)構(gòu)
1 2 3 4 5 6 7 8 9 10 11 12 | try :
# 主代碼塊
pass
except KeyError,e:
# 異常時,執(zhí)行該塊
pass
else :
# 主代碼塊執(zhí)行完,執(zhí)行該塊
pass
finally :
# 無論異常與否,最終執(zhí)行該塊
pass
|
4、主動觸發(fā)異常
1 2 3 4 | try :
raise Exception( '錯誤了。。。' )
except Exception as e:
print (e)
|
5、自定義異常
1 2 3 4 5 6 7 8 9 10 11 12 | class AlexException(Exception):
def __init__( self , msg):
self .message = msg
def __str__( self ):
return self .message
try :
raise AlexException( '我的異常' )
except AlexException as e:
print (e)
|
6、斷言
1 2 3 4 5 6 7 8 | # assert 條件
assert 1 = = 1
assert 1 = = 2
如果成立就成立,不成立就報錯
# 添加異常參數(shù)
assert 2 = = 1 , '2不等于1'
|
設(shè)計模式
一、單例模式
單例,顧名思義單個實例。
學(xué)習單例之前,首先來回顧下面向?qū)ο蟮膬?nèi)容:
python的面向?qū)ο笥蓛蓚€非常重要的兩個“東西”組成:類、實例
面向?qū)ο髨鼍耙唬?/strong>
如:創(chuàng)建三個游戲人物,分別是:

View Code
面向?qū)ο髨鼍岸?/strong>
如:創(chuàng)建對數(shù)據(jù)庫操作的公共類

View Code
實例:結(jié)合場景二實現(xiàn)Web應(yīng)用程序

View Code
對于上述實例,每個請求到來,都需要在內(nèi)存里創(chuàng)建一個實例,再通過該實例執(zhí)行指定的方法。
那么問題來了...如果并發(fā)量大的話,內(nèi)存里就會存在非常多功能上一模一樣的對象。存在這些對象肯定會消耗內(nèi)存,對于這些功能相同的對象可以在內(nèi)存中僅創(chuàng)建一個,需要時都去調(diào)用,也是極好的?。。?/p>
鐺鐺 鐺鐺 鐺鐺鐺鐺鐺,單例模式出馬,單例模式用來保證內(nèi)存中僅存在一個實例?。?!
通過面向?qū)ο蟮奶匦?,?gòu)造出單例模式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # ########### 單例類定義 ###########
class Foo( object ):
__instance = None
@staticmethod
def singleton():
if Foo.__instance:
return Foo.__instance
else :
Foo.__instance = Foo()
return Foo.__instance
# ########### 獲取實例 ###########
obj = Foo.singleton()
|
對于Python單例模式,創(chuàng)建對象時不能再直接使用:obj = Foo(),而應(yīng)該調(diào)用特殊的方法:obj = Foo.singleton() 。

web應(yīng)用實例-單例模式
總結(jié):單利模式存在的目的是保證當前內(nèi)存中僅存在單個實例,避免內(nèi)存浪費!??!
|