Python編程:從入門到實(shí)踐 Day9

學(xué)到“類”這一章的時(shí)候剃允,應(yīng)該算是真正接觸面向?qū)ο缶幊塘耍c之前的流程化的完全不一樣了,所以學(xué)得稍顯吃力踱侣,有些沒寫清楚或?qū)戝e(cuò)的請(qǐng)及時(shí)指正粪小。

第九章 類

1.創(chuàng)建和使用類

個(gè)人理解,類就是把現(xiàn)實(shí)中的一些對(duì)象的屬性和功能進(jìn)行抽象抡句。
比如:
把人作為對(duì)象探膊,每個(gè)人都有姓名、年齡待榔、性別逞壁、身高、體重等信息锐锣,
這些可以歸納作為屬性腌闯。
每個(gè)人都會(huì)坐、站雕憔、躺姿骏、走等,
這些可以歸納為方法斤彼。
方法和屬性的區(qū)別分瘦,個(gè)人理解為:
因?yàn)榉椒ú皇且粋€(gè)變量能表示,而是一些行為琉苇,
而屬性是簡(jiǎn)單的信息嘲玫,能夠直接用一段文字或者幾個(gè)數(shù)字表示。

(1)創(chuàng)建類

class 類名():
*:類名通常首字母大寫翁潘。

(2)__init __()方法:類里面的第一個(gè)方法

每當(dāng)利用類創(chuàng)建實(shí)例時(shí)趁冈,這個(gè)方法都會(huì)自動(dòng)運(yùn)行。

def __init__(self,para_1,para_2):
    self.para_1 = para_1
    self.para_2 = para_2
*:1.init前后均為2個(gè)下劃線拜马!2個(gè)下劃線渗勘!2個(gè)下劃線!
  2.第一個(gè)形參代表了這個(gè)類俩莽,可以是self旺坠,也可以是其他名字。
  3.代碼塊中的兩句話扮超,相當(dāng)于在類實(shí)例化時(shí)取刃,將傳遞過來的實(shí)參傳給了屬性。
  4.以self為前綴的變量可以給類中所有的方法使用出刷。
    可以理解為璧疗,以self為前綴的變量就是屬性,屬性可以在類中任何地方使用馁龟。
  5.定義其他方法的時(shí)候崩侠,通常都將self作為參數(shù)。相當(dāng)于確保所有方法都能使用屬性坷檩。

(3)根據(jù)類創(chuàng)建實(shí)例

定義了一個(gè)類以后却音,可使用以下語句來創(chuàng)建實(shí)例改抡。也就是根據(jù)類生成對(duì)象。

實(shí)例名 = 類名(實(shí)參)
*:1.實(shí)例的名稱通常使用小寫系瓢,方便地與類名相區(qū)分阿纤;
  2.訪問屬性或調(diào)用方法時(shí),使用句點(diǎn)(.)
    即:            類名.屬性名   and   類名.方法

小例子

class People():
    '''嘗試對(duì)人進(jìn)行簡(jiǎn)單的抽象夷陋。'''
    def __init__(self,name,sex,age):
        '''初始化姓名欠拾、性別和年齡'''
        self.name = name
        self.sex = sex
        self.age = age
    def sit(self):
        '''模擬人會(huì)坐下'''
        print(self.name.title() + 'is sitting!')


#實(shí)例化一個(gè)人
zhangsan = People('zhangsan','man','18')
#訪問實(shí)例的屬性
print('My name is ' + zhangsan.name)
#調(diào)用實(shí)例的方法
zhangsan.sit()

將上面的代碼存儲(chǔ)為people.py,然后運(yùn)行肌稻,結(jié)果如下:

image.png

2.使用類和實(shí)例

(1)給屬性指定默認(rèn)值

這個(gè)可以在定義類的init()方法時(shí)設(shè)置清蚀。
書上說:“類中每個(gè)屬性都必須有初始值,哪怕是0或者空字符串爹谭〖闲埃”(P143)
這句話不是很理解,因?yàn)樗约旱睦右裁从薪o初始值诺凡!

拋開這個(gè)不管东揣,還有一種方法設(shè)置默認(rèn)值!
那就是在init()方法里面直接指定腹泌。

def __init__(self,name,sex,age):
        '''初始化姓名嘶卧、性別和年齡'''
        self.name = name
        self.sex = sex
        self.age = age
        self.country = 'China'
*:以這種方法指定默認(rèn)值時(shí),定義init()時(shí)不需要包含country這個(gè)形參凉袱。
并且芥吟,實(shí)例化的時(shí)候,不需要也不允許傳遞這個(gè)參數(shù)专甩。否則會(huì)報(bào)錯(cuò)钟鸵。

(2)修改屬性的值

總共兩種方法:

1.直接修改屬性的值
(接上例)
實(shí)例化:zhangsan = People('zhangsan','man','18')
直接修改:zhangsan.sex = 'woman'
2.通過方法修改
需要在類里面定義一個(gè)修改屬性的方法,然后調(diào)用它來修改屬性涤躲。
*:當(dāng)屬性的默認(rèn)值時(shí)在init()方法里面直接指定時(shí)棺耍,只能這樣修改屬性。
(接上例)
在People類中定義一個(gè)change_country()的方法:
def change_country(self,new_country):
    self.country = new_country
*:注意這個(gè)self不能少种樱!這個(gè)self不能少蒙袍!這個(gè)self不能少!
實(shí)例化:zhangsan = People('zhangsan','man','18')
通過方法修改屬性:zhangsan.change_country('USA')

3.繼承

1.子類會(huì)繼承父類的所有屬性和方法嫩挤,且還可以自己定義新的害幅。
2.創(chuàng)建子類時(shí),父類必須包含在當(dāng)前的文件中岂昭,且位于子類的前面矫限。
(在后面用到了導(dǎo)入以后,應(yīng)該可以不需要這樣了,只需先導(dǎo)入父類)
3.定義子類時(shí)叼风,要用到父類的名字:class 子類名(父類名):

(1)子類的init()方法

子類的init()方法需要先初始化父類的屬性,通過下面的語句來實(shí)現(xiàn):
def __init__(self,name,sex,age)
    """初始化父類的屬性"""
    super().__init__(name,sex,age)
*:super()是一個(gè)特殊函數(shù)棍苹,實(shí)現(xiàn)將父類和子類關(guān)聯(lián)起來无宿。

(2)給子類定義屬性和方法

這個(gè)與類的定義時(shí)一樣的

(3)重寫父類的方法

很簡(jiǎn)單,定義一個(gè)方法枢里,名字與父類中的方法名一樣就行孽鸡。

(4)將實(shí)例用作屬性:也就是在一個(gè)類中調(diào)用另一個(gè)類的實(shí)例作為屬性

這個(gè)實(shí)現(xiàn)了將大型的類拆為很多個(gè)小類。

下面看一個(gè)小栗子栏豺,將上面講到的繼承相關(guān)的串一下:

class People():
    '''嘗試對(duì)人進(jìn)行簡(jiǎn)單的抽象彬碱。'''
    def __init__(self,name,sex,age):
        '''初始化姓名、性別和年齡'''
        self.name = name
        self.sex = sex
        self.age = age
        self.country = 'China'
    def sit(self):
        '''模擬人會(huì)坐下'''
        print(self.name.title() + ' is sitting!')
    def change_country(self,new_country):
        self.country = new_country

class Bodysize():
    '''定義一個(gè)身體數(shù)據(jù)類奥洼,等下實(shí)現(xiàn)將實(shí)例作為屬性巷疼。'''
    def __init__(self,height,weight ):
        self.height = height
        self.weight = weight
    def body_data(self):
        print("I'm " + self.height + "cm tall and "+
               self.weight + "kg weight.")
        
class Teacher(People):
    '''定義一個(gè)老師類,繼承了人這個(gè)類'''
    def __init__(self,name,sex,age):
        '''初始化人類的屬性'''
        super().__init__(name,sex,age)
        #定義一個(gè)子類的屬性
        self.subject = 'Physics'
        self.size = Bodysize('175','70')

    #定義一個(gè)子類的方法
    def simple_introduction(self):
        print("I'm a " + self.subject + " Teacher!")

    #重寫一個(gè)父類的方法
    def sit(self):
        print(self.subject + " Teacher is sitting!")

#實(shí)例化一個(gè)老師對(duì)象
lisi = Teacher('lisi','man','28')
#調(diào)用子類中新定義的方法
lisi.simple_introduction()
#調(diào)用Bodysize實(shí)例的方法
lisi.size.body_data()
#調(diào)用子類中重寫的父類的方法
lisi.sit()

運(yùn)行結(jié)果:

image.png

4.導(dǎo)入類

將類存儲(chǔ)在模塊中灵奖,然后在主程序中導(dǎo)入嚼沿,可以使文件更加簡(jiǎn)潔和清晰。

導(dǎo)入模塊/函數(shù)的幾種方法(與上一章的導(dǎo)入函數(shù)類似):

1.直接導(dǎo)入整個(gè)模塊
import 模塊名
**:調(diào)用時(shí)瓷患,需要使用句點(diǎn)(.)指定模塊和類骡尽。
即:模塊名.類名()
2.導(dǎo)入模塊中的特定類
from 模塊名 import 類名
**:使用這種方法時(shí),實(shí)例化指定的類時(shí)擅编,不需要使用句點(diǎn)(.)指定模塊攀细,
    可以直接用類名來實(shí)例化。
3.導(dǎo)入模塊中的多個(gè)特定類
from 模塊名 import 類名1爱态,類名2
**:也就是用逗號(hào)(,)實(shí)現(xiàn)多個(gè)類同時(shí)導(dǎo)入谭贪。
4.導(dǎo)入模塊中所有的類
from 模塊名  import *
**:使用這種方法時(shí),調(diào)用該模塊中的所有類都不需要使用句點(diǎn)(.)指定模塊名肢藐。
這種方法不推薦故河,理由和導(dǎo)入函數(shù)一樣的,這種方法都是不推薦的吆豹。
5.在一個(gè)模塊中導(dǎo)入另一個(gè)模塊
這個(gè)沒什么特別的鱼的。需要啥就導(dǎo)入啥。

5.Python標(biāo)準(zhǔn)庫(kù)

這一節(jié)實(shí)際上沒說什么痘煤,就是告訴你:
Python標(biāo)準(zhǔn)庫(kù)實(shí)際上就是一組模塊凑阶,里面有很多類和函數(shù)。

6.類編碼風(fēng)格

這個(gè)又是告訴你很多“龜腚”衷快,但是宙橱,這些龜腚是有用的!
熟悉編碼風(fēng)格,養(yǎng)成良好的習(xí)慣师郑,
一來可以讓你的代碼更清晰环葵,二來也方便別人閱讀指點(diǎn)。

1.類名中的每個(gè)單詞的首字母都要大寫宝冕,而且不用下劃線张遭;
2.實(shí)例名和模塊名都使用小寫,用下劃線分隔單詞地梨;
3.類和模塊的定義后面寫一個(gè)文檔字符串(跟函數(shù)一樣的)菊卷;
4.合理使用空行,但不要濫用:
  模塊里面的不同類之間宝剖,用2個(gè)空行洁闰;
  類里面的不同方法之間使用一個(gè)空行;
5.需要同時(shí)導(dǎo)入標(biāo)準(zhǔn)庫(kù)中的模塊和自己寫的模塊時(shí)万细,
  先導(dǎo)入標(biāo)準(zhǔn)庫(kù)的扑眉,
  然后加一個(gè)空行,
  再導(dǎo)入自己寫的模塊雅镊。
-->這樣的好處是讓別人知道你的模塊都來自那些地方襟雷。

這一章寫的很困難,不過梳理一下仁烹,自己是可以搞清楚多了耸弄!
如果哪里有錯(cuò)漏,請(qǐng)不吝賜教卓缰!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末计呈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子征唬,更是在濱河造成了極大的恐慌捌显,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件总寒,死亡現(xiàn)場(chǎng)離奇詭異扶歪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摄闸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門善镰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人年枕,你說我怎么就攤上這事炫欺。” “怎么了熏兄?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵品洛,是天一觀的道長(zhǎng)树姨。 經(jīng)常有香客問我,道長(zhǎng)桥状,這世上最難降的妖魔是什么帽揪? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮辅斟,結(jié)果婚禮上台丛,老公的妹妹穿的比我還像新娘。我一直安慰自己砾肺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布防嗡。 她就那樣靜靜地躺著变汪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚁趁。 梳的紋絲不亂的頭發(fā)上裙盾,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音他嫡,去河邊找鬼番官。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钢属,可吹牛的內(nèi)容都是我干的徘熔。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼淆党,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼酷师!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起染乌,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤山孔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荷憋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體台颠,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厌衙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年唐片,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片空民。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锅铅,死狀恐怖酪呻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盐须,我是刑警寧澤玩荠,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響阶冈,放射性物質(zhì)發(fā)生泄漏闷尿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一女坑、第九天 我趴在偏房一處隱蔽的房頂上張望填具。 院中可真熱鬧,春花似錦匆骗、人聲如沸劳景。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盟广。三九已至,卻和暖如春瓮钥,著一層夾襖步出監(jiān)牢的瞬間筋量,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工碉熄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桨武,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓锈津,卻偏偏與公主長(zhǎng)得像呀酸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子一姿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容