版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、2 Python面向對象 錯誤!未定義書簽。 面向對象技術簡介 創(chuàng)建類 實例 5卅代表類的實例,耐淡 創(chuàng)建實例對象 訪問屬性 Python內置類屬性 python對象銷毀(垃圾回收) 實例 類的繼承 方法重寫 10 基礎重載方法 11 運算符重載 11 類屬性與方法 12 類的私有屬性 12 類的方法 12 類的私有方法 12 實例 單下劃線.雙下劃線.頭尾雙下劃線說明: Python面向對象 面向對象技術簡介 類(Class):用來描述具有相同的厲性和方法的對象的集合。它定義了該集合中每個對象所共有的厲性和方法。對 象是類的實例。 類變量:類變量在整個實例化的對象中是公用的。類變星走義在類中
2、且在函數(shù)體之外。類變星通常不作為實例變 量使用。 數(shù)據(jù)成員:類變量或者實例變長用于處理類及其實例對象的相關的數(shù)據(jù)。 方法重載:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋 (override ),也稱為方法的重載。 實例變蜃:定義在方法中的變S,只作用于當前實例的類。 繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象 作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬是一個 (is-a ) 關系(例圖,Dog 是一個 Animal)。 實例化:
3、創(chuàng)建一個類的實例,類的具體對象。 方法:類中走義的函數(shù)。 對象:通過類定義的數(shù)據(jù)結構實例。對象包括兩個數(shù)據(jù)成員(類變畳和實例變量)和方法。 創(chuàng)建類 使用class語句來創(chuàng)建一個新類,class之后為類的名稱并以S號結尾,如下實例: class ClassName: 類的幫助信息#類文檔字符串 class_suite # 類體 類的幫助倍息可以通過ClassName_doc_查看。 class-suite由類成員,方法,數(shù)據(jù)厲性組成。 實例 以下是一個簡單的python類實例: #coding=utf8 class Empioyee: 所有員工的基類 empCOUnt = 0 def _init
4、_(selfname salary): = name self.salary = salary Employee.empCount += 1 def displayCount(self): ppint Total Employee %d % EmpioyeeempCount def displayEmployee(self): print Name :seifnameSalary:self.salary empCount變量是一個類變量,它的值將在這個類的所有實例之間共拿。你可以在內鹹或外畔使用 Empio yee.em pCount 訪問。 第一種方方法是一種特殊的方法,
5、被稱為類的構造函數(shù)或初始化方法,當創(chuàng)建了這個類的實例時就會 調用該方法 self代表類的實例,self在走義類的方法時是必須有的,雖然在調用時不必傳入相應的參數(shù)。 孔If代表類的實例,而非類 類的方法與普通的函數(shù)只有一個特別的區(qū)別它們必須有一個額外的第一個參數(shù)名稱,按照慣例它的名稱是 self。 class Test: def prt(self): print(self) print(self._class_) t = Test() t.prtO 以上實例執(zhí)行結果為: main .Test 從執(zhí)行結果可以很明顯的岀,self代表的是類的實例,代表當前又蟻的地址,而selfxlass則Jg向類。
6、 self不是python關鍵宇,我他換成wScschool也是可以正常執(zhí)行的: 實例: class Test: def prt(w3cschool): print(w3cschool) print(w3cschool._class_) t = Test() t.prtO 以上實例執(zhí)行結果為: main .Test 創(chuàng)建實例對象 要創(chuàng)建一個類的實例,你可以使用類的名稱并通過_讓_方法接受參數(shù)。 創(chuàng)建Employee類的第一個對象“ empl = Employee(Zana, 2000) “創(chuàng)建Employee類的第二個對象 emp2 = Employee( Manni 5000) 訪問屬性 您
7、可以使用點()來訪問對象的厲性。使用如下類的名稱訪問類變i: empldisplayEmployee() emp2displayEmployee() ppint Total Employee %d % Employee.empCount 完整實例: #coding=utf-8 #!/usr/bin/python class Employee: 所有員工的基類 empCount = 0 def _init_(selfname salary): = name self.salary = salary Employee.empCount += 1 def displayCount
8、(self): print Total Employee %d % Employee.empCount def displayEmployee(self): ppint Name : , Salary:self.salary 臨U建Employee類的第一個對象“ empl = Employee( Zana* 2000) “創(chuàng)建Employee類的第二個對象 emp2 = Employee(Manni 5000) empldisplayEmployee() emp2displayEmployee() ppint Total Employee %d % Employee.emp
9、Count 執(zhí)行以上代碼輸出結果如下: Name : Zara ,Salary;2000 Name : Manni ,Salary:5000 Total Employee 2 你可以添加,刪除 修改類的屬性,如下所示: empl.age = 7 # 添加一個age屬性 empl.age = 8 # 修改age屬性 del empl.age # 刪除age屬性 你也可以使用以下函數(shù)的方式來訪問厲性: getattr(oty, name, default):訪問對象的屬性。 hasattr(obj,name):檢查是否存在一個厲性。 setattr(obj,name,value):設置一個厲性.如
10、果厲性不存在,會創(chuàng)建新厲性。 delattr(obj, name):刪除屬性。 hasattr(empl, age) #如果存在agJ 屬性返回Trueo getattr(empl, age) #返回age,屬性的值 setattr(empl, age, 8) #添加屬性age,值為8 delattr(empl age) #刪除屬性age, Python內置類屬性 dict_:類的屬性(包含一個字典,由類的數(shù)據(jù)厲性組成) _doc_ :類的文檔宇符串 name_:類名 _module_:類走義所在的模塊(類的全名是_main_.className,如果類位 導入橫塊mymod中,那 么 cla
11、ssName_module_ 等于 mymod ) bases_:類的所有父類構成元素(包含了以個由所有父類組成的元組) Python內置類厲性調用實例如下: #coding=utf-8 #!/usr/bin/python class Employee: 所有員工的基類 empCount = 0 def _init_(selfname salary): = name self.salary = salary Employee.empCount += 1 def displayCount(self): ppint Total Employee %d % Employee.em
12、pCount def displayEmployee(self): print Name :selfname Salary:self.salary print print print p pint * Employee. _doc_:, Employee. _doc_ Employee._name_: , Employee._name_ Employee._module_:Employee._module Employee_bases_:Employee._bases_ ppint Employee._diet_: , Employee _diet 執(zhí)行以上代碼輸出結果如下: Employee
13、._doc_:所有員工的基類 Employee_name_: Employee Employee_module_: _main_ Employee_bases_:() Employee._diet_: _module_: _main_, displayCount: empCount: 0$ displayEmployee: _doc_,: xe6x89x80 xe6x9cx89xe5x91x98xe5xb7xa5xe7x9ax84xe5x9fxbaxe7xblxbb, _init_: python對象銷毀(垃圾回收) 同Java語言一樣,Python使用了弓I用計數(shù)這一簡單技術來追蹤內存中的對
14、象。 在Python內部i5錄養(yǎng)所有使用中的嫌各有多少引用。 f內部跟蹤變量,稱為一個引用計數(shù)器。 當對象彼創(chuàng)建時.就創(chuàng)建了一個引用計數(shù),當這個對象不再需要時,也就是說,這個又援的引用計數(shù)變?yōu)? 時,它被垃圾回收。但是回收不是立即啲,由解釋器在適當?shù)臅r機,將垃圾對象占用的內存空間回收。 a = 40 #創(chuàng)建對象40 b = a #增加引用,40的計數(shù) c = b #增加引用.40的計數(shù) del a #減少引用40的計數(shù) b = 100 #減少引用40的訃數(shù) c0 = -1 #減少引用40的計數(shù) 垃圾回收機制不僅針對引用計數(shù)為0的又嫌,同樣也可以處理循環(huán)引用的情況。循環(huán)引用指的是,兩個對象相互
15、引用,但是沒有其他變量引用他們。這種情況下,僅使用弓I用計數(shù)是不夠的。Pytho n的垃圾收集器實際上是一 個弓I用計數(shù)器和_個循環(huán)垃圾收集器。作為引用計數(shù)的補充,垃圾收集器也會留,海分配的總畳很大(及未通過 引用計數(shù)銷毀的另陛)的51嫌。在這種情況下,解釋器會暫停下來,試圖淸理所有未弓I用的循環(huán)。 實例 析構函數(shù)_del_ ,逝的時候被調用,當又撅不再被使用時,_del_法運行: #coding=utf-8 #!/usr/bin/python selfx=0 y=0): X class Point: def _init( self.X = self.y = def _del_(self):
16、class_name = self._class_._name ppint class_namj destroyed ptl = pt2 = pt3 = print PointO ptl ptl id(ptl), id(pt2) id(pt3) # 打印對象的 id del ptl del pt2 del pt3 以上實例運行結果如下: 3083401324 3083401324 3083401324 Point destroyed 注意:通常你需要在單獨的文件中走義f類, 類的繼承 面向對象的編程帶來的主要好處之一是代碼的用,實現(xiàn)這種復用的方法之一是通過繼承柄制。繼承完全可以理 解成類之間的
17、類型和子類型關系。 需要注意的地方:繼承語法class派生類名(基類名):/基類名寫僧舌號里,基本類是在類定義的時候,在 元組之中指明的。 在python中繼承中的一些特點: 1 :在繼承中基類的構造(_init_()方法)不會被自動調用,它需要在其派咎的構造中親自專門調用。 2 :在調用基類的方法時需要加上基類的類名前綴,且需要帶上self參數(shù)變墨。區(qū)別于在類中調用普通函數(shù)時并 不需要帶上self參數(shù) 3 : Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查 找。(先在本類中查找調用的方法找不到才去基類中找) 如果在繼承元組中列了一個以上的類
18、,另吆它就被稱作多置繼承。 語法: 派生類的聲明,與他們的父類類似繼承的基類列表跟在類名之后,如下所示: class SubClassName (PanentClassl, ParentClass2 .): Optional class documentation string class suite 實例: #coding=utf-8 #!/usr/bin/python class Parent:# 泄義父類 parentAttr = 100 def _init_(self): print ”調用父類構造函數(shù)“ def parentMethod(self): print 調用父類方法 def
19、 setAttr(selfattn): Parent.panentAttr = attn def getAttr(self): print 父類屬性:,Parent parentAttr class Child(Parent): # 宦義子類 def _init_(self): print ”調用子類構造方法“ def childMethod(self): C = ChildO c.childMethodO cparentMethod() csetAttp(200) c.getAttrO print,調用子類方法child method #實例化子類 #調用子類的方法 #調用父類方法 #再次調
20、用父類的方法 #再次調用父類的方法 以上代碼執(zhí)行結果如下: 調用子類構造方法 調用子類方法child method 調用父類方法 父類屬性:200 你可以繼承多個類 class A: #定義類A class B: #定義類8 class C(A, 8): #繼承類A和B 你可以使用issubclassO或者isinstanceQ方法來檢測。 issubclassO -布爾函數(shù)判斷一個類是另f 類的務或者刊小類,語法:issubclass(subsup) isinstance(otClass)布爾函數(shù)如果obj是Class類的實例對象或者是一卜Class子類的實例又蟻則返回true. 方法重寫
21、如果你的父類方法的功能不能滿足你的壽求,你可以在子類重寫你父類的方法: 實例: #coding=utf8 #!/usr/bin/python class Parent:# 泄義父類 def myMethod(self): print 調用父類方法 class Child(Parent): # 泄義子類 def myMethod(self): print 調用子類方法 C = ChildO C.myMethod() #子類實例 #子類調用重寫方法 執(zhí)行以上代碼輸出結果如下: 調用子類方法 基礎重載方法 F表列出了一些通用的功能,你可以在自己的類豪寫: 序號 方法,描述&簡單的調用 _init_
22、( self args) 構造函數(shù) 簡單的調用方法:obj = classNamc (args) _del_( self ) 析構方法,刪除一個對象 簡單的調用方法:dell obj _repr_( self ) 轉化為供解釋器讀取的形式 簡單的調用方法:repr(obj) _str_( self ) 用于將值轉化為適于人閱讀的形式 簡單的調用方法:str(obj) _emp_ ( self, X ) 對象比較 簡單的調用方法:emp (obj, X) 運算符重載 Python同樣支持運算符靈載,實例如下: #!/usr/bin/python class Vector: def _init_(
23、selfb): self.a = a self.b = b def _str_(self): return Vector (%d %d) % (self.a, self.b) def _add_(selfothen): return Vector(self.a + other.a, self.b + other.b) vl = Vecton(2,10) v2 = Vecton(5,-2) ppint vl + v2 以上代碼擁亍結果如下際 Vector(78) 類屬性與方法 類的私有屬性 _private_attrs :兩個下劃線開頭,聲明該厲性為私有,不能在類地外部被使用或亙接訪問。在類內部的方法中 使用時 slf._private_attrSo 類的方法 在類地內部,使用def關鍵宇可以為類定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù)self,且為第一 個參數(shù) 類的私有方法 _private_method :兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。在類的內部調 用 self._privatcjnethods 實例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學技術職業(yè)學院《建筑給水排水》2023-2024學年第一學期期末試卷
- 廣東酒店管理職業(yè)技術學院《社會工作基礎》2023-2024學年第一學期期末試卷
- 廣東金融學院《動物微生物與免疫學》2023-2024學年第一學期期末試卷
- 廣東建設職業(yè)技術學院《國際金融管理》2023-2024學年第一學期期末試卷
- 廣東工業(yè)大學《道路與橋梁工程實訓》2023-2024學年第一學期期末試卷
- 廣東東軟學院《高級日語(I)》2023-2024學年第一學期期末試卷
- 廣東創(chuàng)新科技職業(yè)學院《導向信息媒體設計》2023-2024學年第一學期期末試卷
- 上海中醫(yī)藥基礎醫(yī)學免疫學課件緒論
- 廣東白云學院《計算機繪圖CAD》2023-2024學年第一學期期末試卷
- 共青科技職業(yè)學院《西方音樂史與欣賞Ⅰ》2023-2024學年第一學期期末試卷
- 高中英語高頻詞匯拓展延伸
- 2023年浙江杭州西湖文化旅游投資集團有限公司招聘筆試題庫含答案解析
- 班主任名工作室個人工作總結6篇 名班主任工作室總結
- 巧克畢業(yè)論文(南昌大學)超星爾雅學習通網(wǎng)課章節(jié)測試答案
- 大象版二年級科學上冊期末試卷(及答案)
- 榕江縣銻礦 礦業(yè)權出讓收益計算結果的報告
- 機電常用材料進場驗收要點
- 2023年浙江首考英語試題(含答案)
- GB 2719-2018食品安全國家標準食醋
- 電鍍產(chǎn)品檢驗作業(yè)指導書
- 皮囊加壓技術課件
評論
0/150
提交評論