日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python面向?qū)ο缶幊獭菊Z(yǔ)法

系統(tǒng) 1762 0

Python面向?qū)ο缶幊獭菊Z(yǔ)法

一、類(lèi)的語(yǔ)法

上一節(jié)最后的代碼其實(shí)有問(wèn)題,屬性名字和年齡都寫(xiě)死了,想傳名字傳不進(jìn)去。

          
            class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age


p = Person("Alex", 22)
print(p.name, p.age)
          
        

為什么有__init__? 為什么有self? 此時(shí)的你一臉蒙逼,相信不畫(huà)個(gè)圖,你的智商是理解不了的!

畫(huà)圖之前, 你先注釋掉這兩句

          
            # p = Person("Alex", 22)
# print(p.name, p.age)

#加上句
print(Person)
          
        
          
            #執(zhí)行結(jié)果

            
          
        

這代表什么?代表 即使不實(shí)例化,這個(gè)Person類(lèi)本身也是已經(jīng)存在內(nèi)存里的對(duì)不對(duì), yes, cool,那實(shí)例化時(shí),會(huì)產(chǎn)生什么化學(xué)反應(yīng)呢?

其實(shí)self,就是實(shí)例本身!你實(shí)例化時(shí)python解釋器會(huì)自動(dòng)把這個(gè)實(shí)例本身通過(guò)self參數(shù)傳進(jìn)去。

你說(shuō)好吧,假裝懂了,但是這么干有什么好處呢?想了解self的好處,得給Person類(lèi)加個(gè)功能

          
            class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def talk(self):
        print("Hello, my name is %s, I'm %s years old!" % (self.name, self.age))

p = Person("Alex", 22)
# print(p.name, p.age)
p.talk() #注意這里調(diào)用并未傳遞參數(shù)
          
        

執(zhí)行輸出

          
            Hello, my name is Alex, I'm 22 years old!
          
        

為何p.talk()未傳參數(shù)不報(bào)錯(cuò),且為何talk方法定義要跟一個(gè)self參數(shù)?

我們上面講到self其實(shí)是實(shí)例本身, 那p.talk() 其實(shí)相當(dāng)于p.talk(p),你不需要自己把p實(shí)例傳進(jìn)去,解釋器幫你干了,那為何要在talk定義時(shí)加self參數(shù)呢?

是因?yàn)椋愕膖alk方法里有調(diào)用到實(shí)例的屬性呀,這些屬性又都是綁定在實(shí)例上的,你想調(diào)用實(shí)例屬性,就必須要把實(shí)例傳進(jìn)去。

構(gòu)造方法:

__init__(...) 被稱(chēng)為 構(gòu)造方法或初始化方法,在例實(shí)例化過(guò)程中自動(dòng)執(zhí)行,目的是初始化實(shí)例的一些屬性。每個(gè)實(shí)例通過(guò) __init__ 初始化的屬性都是獨(dú)有的

剛才定義的這個(gè)類(lèi)體現(xiàn)了面向?qū)ο蟮牡谝粋€(gè)基本特性, 封裝,其實(shí)就是使用構(gòu)造方法將內(nèi)容封裝到某個(gè)具體對(duì)象中,然后通過(guò)對(duì)象直接或者self間接獲取被封裝的內(nèi)容

了解了基本定義,下面詳解下類(lèi)的方法和屬性

二、類(lèi)的方法

構(gòu)造方法

剛才上面已經(jīng)說(shuō)了,主要作用是實(shí)例化時(shí)給實(shí)例一些初始化參數(shù),或執(zhí)行一些其它的初始化工作,總之,因?yàn)檫@個(gè) __init__ 只要一實(shí)例化,就會(huì)自動(dòng)執(zhí)行,so不管你在這個(gè)方法里寫(xiě)什么,它都會(huì)統(tǒng)統(tǒng)在實(shí)例化時(shí)執(zhí)行一遍。

普通方法

定義類(lèi)的一些正常功能,比如人這個(gè)類(lèi), 可以說(shuō)話、走路、吃飯等,每個(gè)方法其實(shí)想當(dāng)于一個(gè)功能或動(dòng)作

析構(gòu)方法(解構(gòu)方法)

實(shí)例在內(nèi)存中被刪除時(shí),會(huì)自動(dòng)執(zhí)行這個(gè)方法,如你在內(nèi)存里生成了一個(gè)人的實(shí)例,現(xiàn)在他被打死了,那這個(gè)人除了自己的實(shí)例要被刪除外,可能它在實(shí)例外產(chǎn)生的一些痕跡也要清除掉,清除的動(dòng)作就可以寫(xiě)在這個(gè)方法里。

          
            class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def talk(self):
        print("Hello, my name is %s, I'm %s years old!" % (self.name, self.age))

    def __del__(self):
        print("running del method, this person must be died.")


p = Person("Alex", 22)
p.talk()

del p

print('--end program--')
          
        

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 湄潭县| 锡林郭勒盟| 林口县| 南靖县| 新竹县| 民乐县| 元朗区| 蒲江县| 屏东市| 白银市| 策勒县| 黄石市| 论坛| 武冈市| 蒲江县| 海南省| 黔西| 西和县| 黄陵县| 太谷县| 海门市| 大竹县| 获嘉县| 梁河县| 工布江达县| 昭觉县| 金门县| 许昌县| 招远市| 册亨县| 邹城市| 云安县| 奎屯市| 江川县| 哈巴河县| 岳阳县| 龙川县| 镇平县| 东宁县| 凯里市| 乌拉特后旗|