最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解Python中的類(lèi)與實(shí)例

 更新時(shí)間:2015年04月27日 16:18:52   作者:廖雪峰  
這篇文章主要介紹了Python中的類(lèi)與實(shí)例,類(lèi)與實(shí)例的概念是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

面向?qū)ο笞钪匾母拍罹褪穷?lèi)(Class)和實(shí)例(Instance),必須牢記類(lèi)是抽象的模板,比如Student類(lèi),而實(shí)例是根據(jù)類(lèi)創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。

仍以Student類(lèi)為例,在Python中,定義類(lèi)是通過(guò)class關(guān)鍵字:

class Student(object):
  pass

class后面緊接著是類(lèi)名,即Student,類(lèi)名通常是大寫(xiě)開(kāi)頭的單詞,緊接著是(object),表示該類(lèi)是從哪個(gè)類(lèi)繼承下來(lái)的,繼承的概念我們后面再講,通常,如果沒(méi)有合適的繼承類(lèi),就使用object類(lèi),這是所有類(lèi)最終都會(huì)繼承的類(lèi)。

定義好了Student類(lèi),就可以根據(jù)Student類(lèi)創(chuàng)建出Student的實(shí)例,創(chuàng)建實(shí)例是通過(guò)類(lèi)名+()實(shí)現(xiàn)的:

>>> bart = Student()
>>> bart
<__main__.Student object at 0x10a67a590>
>>> Student
<class '__main__.Student'>

可以看到,變量bart指向的就是一個(gè)Student的object,后面的0x10a67a590是內(nèi)存地址,每個(gè)object的地址都不一樣,而Student本身則是一個(gè)類(lèi)。

可以自由地給一個(gè)實(shí)例變量綁定屬性,比如,給實(shí)例bart綁定一個(gè)name屬性:

>>> bart.name = 'Bart Simpson'
>>> bart.name
'Bart Simpson'

由于類(lèi)可以起到模板的作用,因此,可以在創(chuàng)建實(shí)例的時(shí)候,把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫(xiě)進(jìn)去。通過(guò)定義一個(gè)特殊的__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就把name,score等屬性綁上去:

class Student(object):

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

注意到__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是self,表示創(chuàng)建的實(shí)例本身,因此,在__init__方法內(nèi)部,就可以把各種屬性綁定到self,因?yàn)閟elf就指向創(chuàng)建的實(shí)例本身。

有了__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù),但self不需要傳,Python解釋器自己會(huì)把實(shí)例變量傳進(jìn)去:

>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59

和普通的函數(shù)相比,在類(lèi)中定義的函數(shù)只有一點(diǎn)不同,就是第一個(gè)參數(shù)永遠(yuǎn)是實(shí)例變量self,并且,調(diào)用時(shí),不用傳遞該參數(shù)。除此之外,類(lèi)的方法和普通函數(shù)沒(méi)有什么區(qū)別,所以,你仍然可以用默認(rèn)參數(shù)、可變參數(shù)和關(guān)鍵字參數(shù)。
數(shù)據(jù)封裝

面向?qū)ο缶幊痰囊粋€(gè)重要特點(diǎn)就是數(shù)據(jù)封裝。在上面的Student類(lèi)中,每個(gè)實(shí)例就擁有各自的name和score這些數(shù)據(jù)。我們可以通過(guò)函數(shù)來(lái)訪(fǎng)問(wèn)這些數(shù)據(jù),比如打印一個(gè)學(xué)生的成績(jī):

>>> def print_score(std):
...   print '%s: %s' % (std.name, std.score)
...
>>> print_score(bart)
Bart Simpson: 59

但是,既然Student實(shí)例本身就擁有這些數(shù)據(jù),要訪(fǎng)問(wèn)這些數(shù)據(jù),就沒(méi)有必要從外面的函數(shù)去訪(fǎng)問(wèn),可以直接在Student類(lèi)的內(nèi)部定義訪(fǎng)問(wèn)數(shù)據(jù)的函數(shù),這樣,就把“數(shù)據(jù)”給封裝起來(lái)了。這些封裝數(shù)據(jù)的函數(shù)是和Student類(lèi)本身是關(guān)聯(lián)起來(lái)的,我們稱(chēng)之為類(lèi)的方法:

class Student(object):

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

  def print_score(self):
    print '%s: %s' % (self.name, self.score)

要定義一個(gè)方法,除了第一個(gè)參數(shù)是self外,其他和普通函數(shù)一樣。要調(diào)用一個(gè)方法,只需要在實(shí)例變量上直接調(diào)用,除了self不用傳遞,其他參數(shù)正常傳入:

>>> bart.print_score()
Bart Simpson: 59

這樣一來(lái),我們從外部看Student類(lèi),就只需要知道,創(chuàng)建實(shí)例需要給出name和score,而如何打印,都是在Student類(lèi)的內(nèi)部定義的,這些數(shù)據(jù)和邏輯被“封裝”起來(lái)了,調(diào)用很容易,但卻不用知道內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)。

封裝的另一個(gè)好處是可以給Student類(lèi)增加新的方法,比如get_grade:

class Student(object):
  ...

  def get_grade(self):
    if self.score >= 90:
      return 'A'
    elif self.score >= 60:
      return 'B'
    else:
      return 'C'

同樣的,get_grade方法可以直接在實(shí)例變量上調(diào)用,不需要知道內(nèi)部實(shí)現(xiàn)細(xì)節(jié):

>>> bart.get_grade()
'C'

小結(jié)

類(lèi)是創(chuàng)建實(shí)例的模板,而實(shí)例則是一個(gè)一個(gè)具體的對(duì)象,各個(gè)實(shí)例擁有的數(shù)據(jù)都互相獨(dú)立,互不影響;

方法就是與實(shí)例綁定的函數(shù),和普通函數(shù)不同,方法可以直接訪(fǎng)問(wèn)實(shí)例的數(shù)據(jù);

通過(guò)在實(shí)例上調(diào)用方法,我們就直接操作了對(duì)象內(nèi)部的數(shù)據(jù),但無(wú)需知道方法內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。

和靜態(tài)語(yǔ)言不同,Python允許對(duì)實(shí)例變量綁定任何數(shù)據(jù),也就是說(shuō),對(duì)于兩個(gè)實(shí)例變量,雖然它們都是同一個(gè)類(lèi)的不同實(shí)例,但擁有的變量名稱(chēng)都可能不同:

>>> bart = Student('Bart Simpson', 59)
>>> lisa = Student('Lisa Simpson', 87)
>>> bart.age = 8
>>> bart.age
8
>>> lisa.age
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'age'

相關(guān)文章

  • pymongo中g(shù)roup by的操作方法教程

    pymongo中g(shù)roup by的操作方法教程

    這篇文章主要給大家介紹了關(guān)于pymongo中g(shù)roup by的操作方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用pymongo具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python如何讀取base64圖片數(shù)據(jù)

    Python如何讀取base64圖片數(shù)據(jù)

    在Python中,使用base64模塊可以解碼Base64編碼的圖片數(shù)據(jù),首先需要去除Base64字符串的前綴,然后使用base64.b64decode()函數(shù)進(jìn)行解碼,最后將解碼后的數(shù)據(jù)保存為圖片文件,適用于各種MIME類(lèi)型的Base64編碼
    2024-09-09
  • pandas常用表連接merge/concat/join/append詳解

    pandas常用表連接merge/concat/join/append詳解

    使用python的pandas庫(kù)可以很容易幫你搞定,而且性能也是很出色的;百萬(wàn)級(jí)的表關(guān)聯(lián),可以秒出,本文給大家分享pandas常用表連接merge/concat/join/append詳解,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • python 爬蟲(chóng)百度地圖的信息界面的實(shí)現(xiàn)方法

    python 爬蟲(chóng)百度地圖的信息界面的實(shí)現(xiàn)方法

    這篇文章主要介紹了python 爬蟲(chóng)百度地圖的界面的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • tensorflow dataset.shuffle、dataset.batch、dataset.repeat順序區(qū)別詳解

    tensorflow dataset.shuffle、dataset.batch、dataset.repeat順序區(qū)別詳

    這篇文章主要介紹了tensorflow dataset.shuffle、dataset.batch、dataset.repeat順序區(qū)別詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 獨(dú)特的python循環(huán)語(yǔ)句

    獨(dú)特的python循環(huán)語(yǔ)句

    本文主要給大家介紹的是Python循環(huán)語(yǔ)句與其他編程語(yǔ)言中的循環(huán)語(yǔ)句不同的地方,非常的獨(dú)特,有需要的小伙伴可以參考下
    2016-11-11
  • PyCharm永久激活方式(推薦)

    PyCharm永久激活方式(推薦)

    這篇文章主要介紹了PyCharm永久激活方式,本文通過(guò)圖文并茂的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Django實(shí)現(xiàn)微信小程序的登錄驗(yàn)證功能并維護(hù)登錄態(tài)

    Django實(shí)現(xiàn)微信小程序的登錄驗(yàn)證功能并維護(hù)登錄態(tài)

    這篇文章主要介紹了Django實(shí)現(xiàn)小程序的登錄驗(yàn)證功能并維護(hù)登錄態(tài),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • pip安裝tensorflow的坑的解決

    pip安裝tensorflow的坑的解決

    這篇文章主要介紹了pip安裝tensorflow的坑的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 詳解如何在python中讀寫(xiě)和存儲(chǔ)matlab的數(shù)據(jù)文件(*.mat)

    詳解如何在python中讀寫(xiě)和存儲(chǔ)matlab的數(shù)據(jù)文件(*.mat)

    這篇文章主要介紹了詳解如何在python中讀寫(xiě)和存儲(chǔ)matlab的數(shù)據(jù)文件(*.mat),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論

阳城县| 育儿| 新化县| 台北市| 民县| 营山县| 永靖县| 二连浩特市| 汉沽区| 谷城县| 黄陵县| 宿松县| 梁平县| 阿拉尔市| 东丽区| 大姚县| 阿瓦提县| 会泽县| 大关县| 威宁| 平陆县| 潞西市| 海原县| 文山县| 尉犁县| 建宁县| 信丰县| 青田县| 泰来县| 和林格尔县| 克拉玛依市| 陵水| 金堂县| 磴口县| 齐河县| 准格尔旗| 福州市| 兴海县| 平舆县| 和顺县| 大丰市|