日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python——面向对象相关

發布時間:2024/7/19 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python——面向对象相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其他相關

一、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、異常基礎

在編程過程中為了增加友好性,在程序出現bug時一般不會將錯誤信息顯示給用戶,而是現實一個提示的頁面,通俗來說就是不讓用戶看見大黃頁!!!

1 2 3 4 try: ????pass except?Exception,ex: ????pass

需求:將用戶輸入的兩個數字相加

while True:num1 = raw_input('num1:')num2 = raw_input('num2:')try:num1 = int(num1)num2 = int(num2)result = num1 + num2except Exception, e:print '出現異常,信息如下:'print e View Code

2、異常種類

python中的異常種類非常多,每個異常專門用于處理某一項異常!!!

AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x IOError 輸入/輸出異常;基本上是無法打開文件 ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] KeyError 試圖訪問字典里不存在的鍵 KeyboardInterrupt Ctrl+C被按下 NameError 使用一個還未被賦予對象的變量 SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了) TypeError 傳入對象類型與要求的不符合 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由于另有一個同名的全局變量, 導致你以為正在訪問它 ValueError 傳入一個調用者不期望的值,即使值的類型是正確的 常用異常 ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EnvironmentError EOFError Exception FloatingPointError FutureWarning GeneratorExit ImportError ImportWarning IndentationError IndexError IOError KeyboardInterrupt KeyError LookupError MemoryError NameError NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError 更多異常 dic = ["wupeiqi", 'alex'] try:dic[10] except IndexError, e:print e 實例:IndexError dic = {'k1':'v1'} try:dic['k20'] except KeyError, e:print e 實例:KeyError s1 = 'hello' try:int(s1) except ValueError, e:print e ValueError

對于上述實例,異常類只能用來處理指定的異常情況,如果非指定異常則無法處理。

1 2 3 4 5 6 7 # 未捕獲到異常,程序直接報錯 s1?=?'hello' try: ????int(s1) except?IndexError,e: ????print?e

所以,寫程序時需要考慮到try代碼塊中可能出現的任意異常,可以這樣寫:

1 2 3 4 5 6 7 8 9 s1?=?'hello' try: ????int(s1) except?IndexError,e: ????print?e except?KeyError,e: ????print?e except?ValueError,e: ????print?e

萬能異常 在python的異常中,有一個萬能異常:Exception,他可以捕獲任意異常,即:

1 2 3 4 5 s1?=?'hello' try: ????int(s1) except?Exception,e: ????print?e

接下來你可能要問了,既然有這個萬能異常,其他異常是不是就可以忽略了!

答:當然不是,對于特殊處理或提醒的異常需要先定義,最后定義Exception來確保程序正常運行。

1 2 3 4 5 6 7 8 9 s1?=?'hello' try: ????int(s1) except?KeyError,e: ????print?'鍵錯誤' except?IndexError,e: ????print?'索引錯誤' except?Exception, e: ????print?'錯誤'

3、異常其他結構

1 2 3 4 5 6 7 8 9 10 11 12 try: ????# 主代碼塊 ????pass except?KeyError,e: ????# 異常時,執行該塊 ????pass else: ????# 主代碼塊執行完,執行該塊 ????pass finally: ????# 無論異常與否,最終執行該塊 ????pass

4、主動觸發異常

1 2 3 4 try: ????raise?Exception('錯誤了。。。') except?Exception,e: ????print?e

5、自定義異常

1 2 3 4 5 6 7 8 9 10 11 12 class?WupeiqiException(Exception): ????def?__init__(self, msg): ????????self.message?=?msg ????def?__str__(self): ????????return?self.message try: ????raise?WupeiqiException('我的異常') except?WupeiqiException,e: ????print?e

6、斷言

1 2 3 4 5 # assert 條件 assert?1?==?1 assert?1?==?2

四、反射

python中的反射功能是由以下四個內置函數提供:hasattr、getattr、setattr、delattr,改四個函數分別用于對對象內部執行:檢查是否含有某成員、獲取成員、設置成員、刪除成員。

class Foo(object):def __init__(self):self.name = 'wupeiqi'def func(self):return 'func'obj = Foo()# #### 檢查是否含有成員 #### hasattr(obj, 'name') hasattr(obj, 'func')# #### 獲取成員 #### getattr(obj, 'name') getattr(obj, 'func')# #### 設置成員 #### setattr(obj, 'age', 18) setattr(obj, 'show', lambda num: num + 1)# #### 刪除成員 #### delattr(obj, 'name') delattr(obj, 'func')

詳細解析:

當我們要訪問一個對象的成員時,應該是這樣操作:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 class?Foo(object): ????def?__init__(self): ????????self.name?=?'alex' ????def?func(self): ????????return?'func' obj?=?Foo() # 訪問字段 obj.name # 執行方法 obj.func()
?? 那么問題來了? a、上述訪問對象成員的 name 和 func 是什么?? 答:是變量名 b、obj.xxx 是什么意思?? 答:obj.xxx 表示去obj中或類中尋找變量名 xxx,并獲取對應內存地址中的內容。 c、需求:請使用其他方式獲取obj對象中的name變量指向內存中的值 “alex” class Foo(object):def __init__(self):self.name = 'alex'# 不允許使用 obj.name obj = Foo() class Foo(object):def __init__(self):self.name = 'alex'def func(self):return 'func'# 不允許使用 obj.name obj = Foo()print obj.__dict__['name'] 方式一 class Foo(object):def __init__(self):self.name = 'alex'def func(self):return 'func'# 不允許使用 obj.name obj = Foo()print getattr(obj, 'name') 方式二

d、比較三種訪問方式

  • obj.name
  • obj.__dict__['name']
  • getattr(obj, 'name')

答:第一種和其他種比,...
? ? ? 第二種和第三種比,...

#!/usr/bin/env python #coding:utf-8 from wsgiref.simple_server import make_serverclass Handler(object):def index(self):return 'index'def news(self):return 'news'def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])url = environ['PATH_INFO']temp = url.split('/')[1]obj = Handler()is_exist = hasattr(obj, temp)if is_exist:func = getattr(obj, temp)ret = func()return retelse:return '404 not found'if __name__ == '__main__':httpd = make_server('', 8001, RunServer)print "Serving HTTP on port 8000..."httpd.serve_forever() Web框架實例

結論:反射是通過字符串的形式操作對象相關的成員。一切事物都是對象!!!

#!/usr/bin/env python # -*- coding:utf-8 -*-import sysdef s1():print 's1'def s2():print 's2'this_module = sys.modules[__name__]hasattr(this_module, 's1') getattr(this_module, 's2') 反射當前模塊成員

類也是對象

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class?Foo(object): ????staticField?=?"old boy" ????def?__init__(self): ????????self.name?=?'wupeiqi' ????def?func(self): ????????return?'func' ????@staticmethod ????def?bar(): ????????return?'bar' print?getattr(Foo,?'staticField') print?getattr(Foo,?'func') print?getattr(Foo,?'bar')

模塊也是對象

#!/usr/bin/env python # -*- coding:utf-8 -*-def dev():return 'dev' home.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/usr/bin/env python # -*- coding:utf-8 -*- """ 程序目錄: ????home.py ????index.py 當前文件: ????index.py """ import?home as obj #obj.dev() func?=?getattr(obj,?'dev') func()?

拓展:

  import 模塊 (反射實現):

  a = __import__("模塊名")

  a = __import__('lib.test.com', fromlist=True)

轉載于:https://www.cnblogs.com/LiCheng-/p/6444948.html

總結

以上是生活随笔為你收集整理的python——面向对象相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。