python(22)--面向对象1-封装
python面向?qū)ο?/h3>- 1面向過程/面向?qū)ο?/li>
- 2面向?qū)ο蠛诵母拍?類
- 3類的設(shè)計(jì)
- 3.1類三要素-類名、屬性、方法
- 3.2面向?qū)ο蠡A(chǔ)語法
- 3.2.1查看對(duì)象的常用方法
- 3.2.2類定義
- 3.2.3創(chuàng)建類對(duì)象
- 3.2.4__init__()方法
- 3.2.5 self參數(shù)
- 3.2.6類內(nèi)置方法和屬性
- _del_()方法--銷毀對(duì)象
- _str_()方法--定制化輸出對(duì)象
- 4面向?qū)ο蟮姆庋b
- 4.1 身份運(yùn)算符號(hào) is、is not
- 4.2 私有屬性和私有方法
本系列博文來自學(xué)習(xí)《Python基礎(chǔ)視頻教程》筆記整理,視屏教程連接地址:http://yun.itheima.com/course/273.html
- 3.1類三要素-類名、屬性、方法
- 3.2面向?qū)ο蠡A(chǔ)語法
- 3.2.1查看對(duì)象的常用方法
- 3.2.2類定義
- 3.2.3創(chuàng)建類對(duì)象
- 3.2.4__init__()方法
- 3.2.5 self參數(shù)
- 3.2.6類內(nèi)置方法和屬性
- _del_()方法--銷毀對(duì)象
- _str_()方法--定制化輸出對(duì)象
- 4.1 身份運(yùn)算符號(hào) is、is not
- 4.2 私有屬性和私有方法
1面向過程/面向?qū)ο?/h1>
過程和函數(shù):
過程是一個(gè)早期的編程概念,類似于函數(shù),只能執(zhí)行,沒有返回值。
函數(shù)不僅能執(zhí)行,還可以有返回值。
面向過程 和 面向?qū)ο?/strong>:
面向過程:強(qiáng)調(diào)怎么做,把完成一個(gè)需求的步驟依次完成,根據(jù)開發(fā)需求,將獨(dú)立功能封裝成一個(gè)又一個(gè)的函數(shù)。
在開發(fā)復(fù)雜項(xiàng)目,沒有固定的功能,開發(fā)難度大
面向?qū)ο?#xff1a;強(qiáng)調(diào)誰來做。根據(jù)職責(zé)在一個(gè)對(duì)象中封裝更多的方法.
在完成一個(gè)需求時(shí),首先確定職責(zé),要明確該職責(zé)的對(duì)象,最后完成需求只要調(diào)用對(duì)應(yīng)的對(duì)象就能完成該功能。
面向?qū)ο缶幊痰睦莹C植物大戰(zhàn)僵尸:
向日葵:產(chǎn)陽(yáng)光,搖晃,生命值,主程序要做的就是把向日葵往地上一擺就行了(哈哈哈太搞笑了)
僵尸:啃植物,移動(dòng)
2面向?qū)ο蠛诵母拍?類
類: 一群具有相同特征或者行為的事物的統(tǒng)稱,是抽象的,不能直接使用。類的職責(zé)很單一就是為了創(chuàng)建對(duì)象用的。
特征被稱為屬性,
行為被稱為方法。
(類:制造飛機(jī)使用的圖紙,飛機(jī)具有什么特征,飛機(jī)有什么行為。)
對(duì)象:是由類創(chuàng)建的一個(gè)具體存在,可以直接使用。在程序開發(fā)時(shí)應(yīng)該先有類。
(有了圖紙,就可以造真的飛機(jī)。)
類和對(duì)象的關(guān)系:類只有一個(gè),對(duì)象可以有很多個(gè),不同對(duì)象之間的屬性可能不同,(同一張圖紙?jiān)斐鰜淼娘w機(jī)可能顏色各不相同。)
類中的屬性和方法對(duì)象中也會(huì)有,不會(huì)多也不會(huì)少。
3類的設(shè)計(jì)
3.1類三要素-類名、屬性、方法
面向?qū)ο蟮拈_發(fā)之前,應(yīng)該進(jìn)行需求分析,確定一下,程序中要包含什么類。
設(shè)計(jì)類時(shí)要滿足的三個(gè)要素
類名: 大駝峰命名,名詞提煉法,
屬性: 類別的特征
方法: 動(dòng)詞提煉法
例子:
小明今年18歲,身高175,今天早上去跑步,然后去吃飯
小美今年17歲,身高1.65,小美不跑步,小妹喜歡吃東西。
定義:人類:三個(gè)屬性名字身高年齡,三個(gè)方法。
3.2面向?qū)ο蠡A(chǔ)語法
對(duì)象無處不在,變量,數(shù)據(jù),函數(shù)都是對(duì)象。
3.2.1查看對(duì)象的常用方法
1.ipython中使用.+tab鍵來確定方法
2.dir(對(duì)象)查看的所有方法,帶‘__’是內(nèi)置方法和屬性
3.__doc__可以查看函數(shù)文檔
(ipython 中定義函數(shù),兩個(gè)回車之后結(jié)束定義)
3.2.2類定義
定義一個(gè)簡(jiǎn)單的類(在類中封裝方法)
Class 類名:Def 方法名(self,參數(shù)列表):#第一個(gè)參數(shù)一定要是self,如果沒有其他參數(shù)也要寫一個(gè)self.3.2.3創(chuàng)建類對(duì)象
接收對(duì)象的變量同樣是對(duì)對(duì)象的引用,Tom接受貓類對(duì)象,為貓對(duì)象分配空間,讓tom 指向這個(gè)對(duì)象
變量名=類名()
1.注:用print輸出對(duì)象變量,會(huì)輸出這個(gè)變量引用的對(duì)象 是由哪一個(gè)類創(chuàng)建的對(duì)象,以及在內(nèi)存中的地址(以16進(jìn)制的形式表示)
2.使用同一個(gè)類創(chuàng)建的不同的對(duì)象 指向的內(nèi)存地址不同。就是說,引用不同,對(duì)象不同。
3.在類的外部給對(duì)象增加屬性(這種方式很簡(jiǎn)單,但是不推薦使用)
對(duì)象.屬性名=“屬性值”
在類的外部給對(duì)象增加屬性會(huì)造成的隱患:運(yùn)行時(shí)找到屬性可以正常執(zhí)行,找不到屬性就會(huì)報(bào)錯(cuò)。所以,類的屬性應(yīng)該封裝在類定義中。
AttributeError: ‘Cat’ object has no attribute ‘name’
3.2.4__init__()方法
用類名+()創(chuàng)建對(duì)象時(shí)會(huì)做兩件事:1.自動(dòng)為對(duì)象分配內(nèi)存空間;2.調(diào)用__init__()方法為對(duì)象的屬性設(shè)置初始值(初始化方法)
對(duì)象的初始化方法__init__()專門用來定義類的屬性。在初始化方法內(nèi)部定義屬性。在初始化方法__init__()中添加形參,在創(chuàng)建對(duì)象時(shí),將屬性作為實(shí)參傳入。不同的對(duì)象就有不同的屬性值。
self.屬性名=屬性值
3.2.5 self參數(shù)
self 保存著對(duì)象的引用。哪一個(gè)對(duì)象調(diào)用的方法,self 就是該對(duì)象的引用。利用self在 類封裝的方法 中輸出對(duì)象屬性。self .屬性名 來訪問對(duì)象的屬性。
對(duì)象內(nèi)部屬性和方法的調(diào)用都是用 self.屬性 或者 self.方法 來實(shí)現(xiàn)。
3.2.6類內(nèi)置方法和屬性
一般不需要認(rèn)為去編寫,如果重寫了該方法就能實(shí)現(xiàn)一些神奇的功能。
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,也叫做“魔法”方法。
del()方法–銷毀對(duì)象
一個(gè)對(duì)象要被在內(nèi)存中銷毀,系統(tǒng)會(huì)自動(dòng)調(diào)用對(duì)象的_del_()方法。生命周期:類名創(chuàng)建對(duì)象- del 方法調(diào)用結(jié)束
str()方法–定制化輸出對(duì)象
print輸出對(duì)象變量,默認(rèn)情況下是輸出變量 引用的對(duì)象 是由哪一個(gè)類創(chuàng)建的,以及在內(nèi)存中的地址。但是,希望輸出自定義的內(nèi)容,就可以調(diào)用_str_()方法。
def __str__(self):#必須返回一個(gè)字符串return "我是小貓[%s]" % self.name輸出對(duì)象變量print(tom)時(shí),就不是輸出默認(rèn)內(nèi)容,而寫在_str_方法中的內(nèi)容。
當(dāng)使用print輸出對(duì)象的時(shí)候,只要自己定義了__str__(self)方法,那么就會(huì)打印從在這個(gè)方法中return的數(shù)據(jù)
參考資料:https://www.runoob.com/note/41154
4面向?qū)ο蟮姆庋b
封裝是面向?qū)ο缶幊痰囊淮筇攸c(diǎn),面向?qū)ο缶幊痰牡谝徊建C將屬性和方法封裝到一個(gè)抽象的類中,外界使用類創(chuàng)建對(duì)象時(shí),讓對(duì)象 調(diào)用類的方法。所有方法的細(xì)節(jié),都被封裝在類內(nèi)部。
小明愛跑步:體重75kg,跑步會(huì)減肥0.5Kg,吃東西會(huì)增重1kg.
class Person:def __init__(self,new_name,new_weight):self.name=new_nameself.weight=new_weightdef eat(self):self.weight+=1def run(self):self.weight-=0.5def __str__(self):return "%s 重 %.2f kg" % (self.name,self.weight) xiaoming=Person("xiaoming",65) #這里定義的類型決定了,該屬性能夠進(jìn)行什么操作。 xiaoming.eat() xiaoming.run() print(xiaoming)同一個(gè)類創(chuàng)建的不同對(duì)象的屬性是互補(bǔ)干擾的。
一個(gè)對(duì)象的屬性可以是另一個(gè)類創(chuàng)建的對(duì)象,被使用的類應(yīng)該先開發(fā)。
4.1 身份運(yùn)算符號(hào) is、is not
身份運(yùn)算符號(hào) is、is not,比較兩個(gè)對(duì)象的內(nèi)存地址是否一致。
比較運(yùn)算符==判斷兩個(gè)變量的值是否相等。
在Python中對(duì)None進(jìn)行比較時(shí)建議使用is進(jìn)行比較。
4.2 私有屬性和私有方法
在實(shí)際應(yīng)用中對(duì)象的某些屬性或者方法只希望在對(duì)象的內(nèi)部使用,而不希望外部訪問。
私用屬性: 對(duì)象不希望公開的屬性
私有方法: 對(duì)象不希望公開的方法
定義方式:在定義屬性或者方法時(shí),在屬性或者方法名下面 增加 兩個(gè)下劃線,定義的就是私有屬性或者方法。實(shí)際是偽私有屬性 和 偽私有方法,Python解釋器會(huì)給加下劃線的屬性名和方法名做特殊處理,使用對(duì)應(yīng)的屬性名依舊可以訪問。
_類名__屬性名
在對(duì)象的方法內(nèi)部,可以訪問私有屬性,但是在外界,不能訪問私有屬性(對(duì)象名.屬性名)或者私有方法(對(duì)象名.方法名)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python(22)--面向对象1-封装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python Cookbook 3rd
- 下一篇: 《Python Cookbook 3rd