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

跟老齊學(xué)Python之類(lèi)的細(xì)節(jié)

 更新時(shí)間:2014年10月13日 10:49:14   投稿:hebedich  
前面對(duì)類(lèi)的有關(guān)內(nèi)容已經(jīng)描述不少了,其實(shí)話題遠(yuǎn)遠(yuǎn)沒(méi)有結(jié)束,不過(guò)對(duì)于初學(xué)者,掌握這些已經(jīng)算是入門(mén),在以后的實(shí)踐中,還需要進(jìn)行體會(huì)和感悟。

這幾天和幾個(gè)朋友以各種途徑討論過(guò)OOP的相關(guān)問(wèn)題,他們是:令狐蟲(chóng)、Frank、晉劍、小馮

大家對(duì)OOP有不同看法,所謂工程派和學(xué)院派看法不一致。從應(yīng)用的角度看,工程派的觀點(diǎn)是值得推薦的,那就是:不用太在意內(nèi)部是怎么工作的,只要能夠解決眼下的問(wèn)題即可。但是,對(duì)于學(xué)習(xí)者而言,如果僅僅停留在工程派的層面(特別提醒,上述幾位朋友都是工程派的大俠,他們可不是簡(jiǎn)單地能夠使用,其實(shí)是更高層次的“無(wú)招勝有招”),學(xué)習(xí)者可能感覺(jué)有點(diǎn)不透徹。所以,學(xué)習(xí)者,特別是初學(xué)者,要知道一些內(nèi)部原因,但是也別為了鉆研內(nèi)部原因而忘記了應(yīng)用的目的??磥?lái)兩者協(xié)調(diào)還是一個(gè)難辦的事情。不用著急,隨著實(shí)踐的深入,就逐漸有體會(huì)了。

下面我根據(jù)MARK Lutz的《Learning Python》中的“大師眼中的OOP”,列一些使用OOP的常見(jiàn)原因。
 •代碼重用。這是很簡(jiǎn)單(并且是使用OOP的最主要原因)。通過(guò)支持繼承,類(lèi)允許通過(guò)定制來(lái)編程,而不是每次都從頭開(kāi)始一個(gè)項(xiàng)目。
 •封裝。在對(duì)象接口后包裝其實(shí)現(xiàn)的細(xì)節(jié),從而隔離了代碼的修改對(duì)用戶產(chǎn)生的影響。
 •結(jié)構(gòu)。類(lèi)提供了一個(gè)新的本地作用域,最小化了變量名沖突。他們還提供了一種編寫(xiě)和查找實(shí)現(xiàn)代碼,以及去管理對(duì)象狀態(tài)的自然場(chǎng)所。
 •維護(hù)性。類(lèi)自然而然地促進(jìn)了代碼的分解,這讓我們減少了冗余。對(duì)虧支持類(lèi)的結(jié)構(gòu)以及代碼重用,這樣每次只需要修改代碼中一個(gè)拷貝就可以了。
 •一致性。類(lèi)和繼承可以實(shí)現(xiàn)通用的接口。這樣代碼不僅有了統(tǒng)一的外表和觀感,還簡(jiǎn)化了代碼的調(diào)試、理解以及維護(hù)。
 •多態(tài)。多態(tài)讓代碼更靈活和有了廣泛的適用性。(這似乎是OOP的屬性,不是使用它的理由)
 
不管怎么樣,類(lèi)是一個(gè)非常重要的東西,看官在學(xué)習(xí)的時(shí)候,一定要多加運(yùn)用。

此外,對(duì)于python2來(lái)說(shuō),還有一個(gè)叫做“新式類(lèi)”(new-style)的東西,這個(gè)對(duì)應(yīng)于前面講過(guò)的類(lèi),那么前面講過(guò)的類(lèi)就稱為“經(jīng)典”(classic)類(lèi)。但是,對(duì)于Python3來(lái)講,沒(méi)有這種區(qū)別,二者融合。只是在Python2中,兩個(gè)是有區(qū)別的。本教程在基礎(chǔ)部分,依然不講授新式類(lèi)的問(wèn)題,如果看官有興趣,可以自己在GOOGLE中查找有關(guān)資料,也可以隨著本課程深入,到下一個(gè)階段來(lái)學(xué)習(xí)。

綁定和無(wú)綁定方法

看官是否還記得,在學(xué)習(xí)類(lèi)的方法的時(shí)候,提到過(guò),類(lèi)的方法就是函數(shù),只不過(guò)這個(gè)函數(shù)的表現(xiàn)有點(diǎn)跟前面學(xué)過(guò)的函數(shù)不一樣,比如有個(gè)self。當(dāng)然,也不是必須要有的,下面看官就會(huì)看到?jīng)]有self的。既然方法和函數(shù)一樣,本質(zhì)上都是函數(shù),那么,函數(shù)那部分學(xué)習(xí)的時(shí)候已經(jīng)明確了:函數(shù)是對(duì)象,所以,類(lèi)方法也是對(duì)象。正如剛才說(shuō)的,類(lèi)的方法中,有的可以有self,有的可以沒(méi)有。為了進(jìn)行區(qū)別,進(jìn)一步做了這樣的定義:
 •無(wú)綁定類(lèi)方法對(duì)象:無(wú)self
 •綁定實(shí)例方法對(duì)象:有self
 
調(diào)用綁定實(shí)例方法對(duì)象

復(fù)制代碼 代碼如下:

>>> class MyClass:
...     def foo(self,text):
...         print text
...

 可以用下面的方式調(diào)用實(shí)例方法

復(fù)制代碼 代碼如下:

>>> a = MyClass()       #創(chuàng)建類(lèi)實(shí)例
>>> a.foo('qiwsir.github.io')       #調(diào)用實(shí)例方法
qiwsir.github.io
>>> a.foo
<bound method MyClass.foo of <__main__.MyClass instance at 0xb74495ac>>

 在這個(gè)實(shí)例方法調(diào)用的時(shí)候,其數(shù)據(jù)傳遞流程,在《編寫(xiě)類(lèi)之二方法》中有一張圖,圖中顯示了,上述的調(diào)用方法中,其實(shí)已經(jīng)將實(shí)例名稱a傳給了self,這就是調(diào)用綁定實(shí)例方法對(duì)象,有self。

上面的調(diào)用過(guò)程,還可以這樣來(lái)實(shí)現(xiàn):

復(fù)制代碼 代碼如下:

>>> a = MyClass()
>>> x = a.foo       #把實(shí)例a和方法函數(shù)foo綁定在一起
>>> x
<bound method MyClass.foo of <__main__.MyClass instance at 0xb74495ac>>
>>> x("qiwsir.github.io")
qiwsir.github.io

 在上面的調(diào)用中,其實(shí)相當(dāng)于前面的調(diào)用過(guò)程的分解動(dòng)作。即先將實(shí)例a和方法函數(shù)foo綁定在一起,然后賦值給x,這時(shí)候x就相當(dāng)于一個(gè)簡(jiǎn)單函數(shù)一樣,可以通過(guò)上述方式傳入?yún)?shù)。這里將實(shí)例和方法函數(shù)綁定的方式就是運(yùn)用點(diǎn)號(hào)運(yùn)算(object.method_function)

調(diào)用無(wú)綁定類(lèi)方法對(duì)象

所謂類(lèi)方法對(duì)象,就是不通過(guò)實(shí)例,而是用類(lèi)進(jìn)行點(diǎn)號(hào)運(yùn)算來(lái)獲得方法函數(shù)(ClassName.method_function)

復(fù)制代碼 代碼如下:

>>> a = MyClass()
>>> y = MyClass.foo     #這里沒(méi)有用類(lèi)調(diào)用
>>> y
<unbound method MyClass.foo>

 這樣的調(diào)用,就得到了無(wú)綁定方法對(duì)象,但是,調(diào)用的時(shí)候必須傳入實(shí)例做為第一參數(shù),如下

復(fù)制代碼 代碼如下:

>>> y(a,"qiwsir.github.io")
qiwsir.github.io

 否則,就報(bào)錯(cuò)。請(qǐng)看官特別注意報(bào)錯(cuò)信息

復(fù)制代碼 代碼如下:

>>> y("qiwsir.github.io")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method foo() must be called with MyClass instance as first argument (got str instance instead)
>>>

 在編程實(shí)踐中,似乎用實(shí)例方法調(diào)用更多一下。

文檔字符串

在寫(xiě)程序的時(shí)候,必須要寫(xiě)必要的文字說(shuō)明,沒(méi)別的原因,除非你的代碼寫(xiě)的非常容易理解,特別是各種變量、函數(shù)和類(lèi)等的命名任何人都能夠很容易理解,否則,文字說(shuō)明是不可缺少的。

在函數(shù)、類(lèi)或者文件開(kāi)頭的部分寫(xiě)文檔字符串說(shuō)明,一般采用三重引號(hào)。這樣寫(xiě)的最大好處是能夠用help()函數(shù)看。

復(fù)制代碼 代碼如下:

"""This is python lesson"""

def start_func(arg):
    """This is a function."""
    pass

class MyClass:
    """Thi is my class."""
    def my_method(self,arg):
        """This is my method."""
        pass

 這樣的文檔是必須的。

當(dāng)然,在編程中,有不少地方要用“#”符號(hào)來(lái)做注釋。一般用這個(gè)來(lái)注釋局部。

類(lèi)其實(shí)并沒(méi)有結(jié)束,不過(guò)本講座到此對(duì)類(lèi)暫告一段??垂僖鄬?shí)踐。

相關(guān)文章

  • Python實(shí)現(xiàn)PDF轉(zhuǎn)為Excel的示例講解

    Python實(shí)現(xiàn)PDF轉(zhuǎn)為Excel的示例講解

    這篇文章主要為大家詳細(xì)介紹了在Python中將PDF表格轉(zhuǎn)換為Excel文件的解決方案,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 一維信號(hào)小波去噪原理解析及python實(shí)現(xiàn)方式

    一維信號(hào)小波去噪原理解析及python實(shí)現(xiàn)方式

    這篇文章主要介紹了一維信號(hào)小波去噪原理解析及python實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python面向?qū)ο笾^承和組合用法實(shí)例分析

    Python面向?qū)ο笾^承和組合用法實(shí)例分析

    這篇文章主要介紹了Python面向?qū)ο笾^承和組合用法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中組合與繼承的相關(guān)原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • python實(shí)現(xiàn)棋盤(pán)覆蓋問(wèn)題及可視化

    python實(shí)現(xiàn)棋盤(pán)覆蓋問(wèn)題及可視化

    這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)棋盤(pán)覆蓋問(wèn)題及可視化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python中的reduce內(nèi)建函數(shù)使用方法指南

    python中的reduce內(nèi)建函數(shù)使用方法指南

    python中的reduce內(nèi)建函數(shù)是一個(gè)二元操作函數(shù),他用來(lái)將一個(gè)數(shù)據(jù)集合(鏈表,元組等)中的所有數(shù)據(jù)進(jìn)行下列操作:用傳給reduce中的函數(shù) func()(必須是一個(gè)二元操作函數(shù))先對(duì)集合中的第1,2個(gè)數(shù)據(jù)進(jìn)行操作,得到的結(jié)果再與第三個(gè)數(shù)據(jù)用func()函數(shù)運(yùn)算,最后得到一個(gè)結(jié)果
    2014-08-08
  • Selenium?4.2.0?標(biāo)簽定位8種方法詳解

    Selenium?4.2.0?標(biāo)簽定位8種方法詳解

    這篇文章主要介紹了Selenium?4.2.0?標(biāo)簽定位8種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • python基礎(chǔ)之共有操作

    python基礎(chǔ)之共有操作

    這篇文章主要介紹了python函數(shù)的定義和調(diào)用,實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 淺談opencv自動(dòng)光學(xué)檢測(cè)、目標(biāo)分割和檢測(cè)(連通區(qū)域和findContours)

    淺談opencv自動(dòng)光學(xué)檢測(cè)、目標(biāo)分割和檢測(cè)(連通區(qū)域和findContours)

    這篇文章主要介紹了淺談opencv自動(dòng)光學(xué)檢測(cè)、目標(biāo)分割和檢測(cè)(連通區(qū)域和findContours),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python連接SQL?server數(shù)據(jù)庫(kù)并進(jìn)行簡(jiǎn)單查詢的操作詳解

    Python連接SQL?server數(shù)據(jù)庫(kù)并進(jìn)行簡(jiǎn)單查詢的操作詳解

    SQL?Server是微軟推出的重量級(jí)的數(shù)據(jù)庫(kù),本文將給大家詳細(xì)介紹了一下Python連接SQL?server數(shù)據(jù)庫(kù)詳細(xì)流程,并通過(guò)代碼示例給大家講解的非常清除,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • python中的gunicorn配置和使用教程

    python中的gunicorn配置和使用教程

    這篇文章主要介紹了python中的gunicorn配置和使用教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

新蔡县| 衢州市| 谢通门县| 浙江省| 广宁县| 彰武县| 新巴尔虎左旗| 德兴市| 休宁县| 兴和县| 巴塘县| 库伦旗| 浦北县| 阿荣旗| 红安县| 临夏县| 莱阳市| 孟村| 邵武市| 正定县| 汉川市| 日土县| 农安县| 娄底市| 子长县| 五河县| 彭州市| 岐山县| 仁布县| 通道| 海宁市| 南和县| 宜章县| 儋州市| 呈贡县| 大荔县| 石柱| 刚察县| 铁力市| 丽水市| 金堂县|