国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[零基礎學python]編寫類之二方法

Dongjie_Liu / 1175人閱讀

摘要:是一個具體的數據,通過構造函數中的參數,傳給實例的屬性,在類中的另外一個方法的參數列表中第一個就是,表示要承接對象,,就是在類內部通過對象,把它的屬性的數據傳導如。

上一講中創建了類,并且重點講述了構造函數以及類實例,特別是對那個self,描述了不少。在講述構造函數的時候特別提到,init()是一個函數,只不過在類中有一點特殊的作用罷了,每個類,首先要運行它,它規定了類的基本結構。

數據流轉過程

除了在類中可以寫這種函數之外,在類中還可以寫別的函數,延續上一講的例子:

#!/usr/bin/env python
#coding:utf-8

class Person:
    def __init__(self, name, lang="golang", website="www.google.com"):
        self.name = name
        self.lang = lang
        self.website = website
        self.email = "qiwsir@gmail.com"

    def author(self):
        return self.name

laoqi = Person("LaoQi")
info = Person("qiwsir",lang="python",website="qiwsir.github.io")

print "Author name from laoqi:",laoqi.author()
print "Author name from info:",info.author()

#運行結果

Author name from laoqi: LaoQi
Author name from info: qiwsir

看官可能已經注意了,這段代碼比上一講多了一個函數author(self),這個我們先不管,稍后會詳細分解。首先看看數據是如何在這個代碼中流轉的。為了能夠清楚,畫一張圖,所謂一圖勝千言萬語,有圖有真相。

定義類Person,然后創建實例laoqi=Person("LaoQi"),看官注意觀察圖上的箭頭方向。laoqi這個實例和Person類中的self對應,它們都是引用了實例對象(很多時候簡化說成是實例對象)。"LaoQi"是一個具體的數據,通過構造函數中的name參數,傳給實例的屬性self.name,在類Person中的另外一個方法author的參數列表中第一個就是self,表示要承接self對象,return self.name,就是在類內部通過self對象,把它的屬性self.name的數據傳導如author。

當運行laoqi.author()的時候,就是告訴上面的代碼,調用laoqi實例對象,并得到author()方法的結果,laoqi這個實例就自動被告訴了author()(注意,self參數在這里不用寫,這個告訴過程是python自動完成的,不用我們操心了),author方法就返回laoqi實例的屬性,因為前面已經完成了laoqi與self的對應過程,所以這時候author里面的self就是laoqi,自然self.name=laoqi.name。

看官可以跟隨我在做一個實驗,那就是在author中,return laoqi.name,看看什么效果。因為既然laoqi和self是同一個實例對象,直接寫成laoqi.name是不是也可以呢?

#!/usr/bin/env python
#coding:utf-8

class Person:
    def __init__(self, name, lang="golang", website="www.google.com"):
        self.name = name
        self.lang = lang
        self.website = website
        self.email = "qiwsir@gmail.com"

    def author(self):
        #return self.name
        return laoqi.name       #返回

laoqi = Person("LaoQi")
info = Person("qiwsir",lang="python",website="qiwsir.github.io")

print "Author name from laoqi:",laoqi.author()
print "Author name from info:",info.author()

#輸出結果
Author name from laoqi: LaoQi   #laoqi實例輸出結果
Author name from info: LaoQi    #info實例輸出結果

從結果中可以看出,沒有報錯。但是,info這個實例輸出的結果和laoqi實例輸出的結果一樣。原來,當調用了info實例之后,運行到author(),返回的是laoqi.name。所以,這里一定要用self實例。在調用不同的實例時,self會自動的進行匹配,當然,匹配過程是python完成,仍然不用我們操心。

OK,數據流轉過程,看官是否理解了呢?下面進入方法編寫的環節

為什么要用到方法

在類里面,可以用def語句來編寫函數,但是,通常這個函數的樣子是這樣的:

class ClassName:
    def __init__(self,*args):
        ...
    def method(self,*args):     #是一個在類里面的函數
        ...

在類ClassName里面,除了前面那個具有初始化功能的構造函數之外,還有一個函數method,這個函數和以前學習過的函數一樣,函數里面要寫什么,也沒有特別的規定。但是,這個函數的第一個參數必須是self,或者說,可以沒有別的參數,但是self是必須寫上并且是第一個。這個self參數的作用前面已經說過了。

這樣看來,類里面的這個函數還有點跟以前函數不同的地方。

類里面的這個函數,我們就稱之為方法

之所以用方法,也是用類的原因,也是用函數的原因,都是為了減少代碼的冗余,提高代碼的重用性,這也是OOP的原因。

方法怎樣被重用呢?看本最開始的那段代碼,里面有一個author方法,不管是laoqi還是info實例,都用這個方法返回實例導入的名字。這就是體現了重用。

編寫和操作方法

編寫方法的過程和編寫一個函數的過程一樣,需要注意的就是要在參數列表中第一個寫上self,即使沒有其它的參數。

#!/usr/bin/env python
#coding:utf-8

class Person:
    def __init__(self, name, lang="golang", website="www.google.com"):
        self.name = name
        self.lang = lang
        self.website = website
        self.email = "qiwsir@gmail.com"

    def author(self, address):
        #return self.name
        return laoqi.name+" in "+address

laoqi = Person("LaoQi")
info = Person("qiwsir",lang="python",website="qiwsir.github.io")

print "Author name from laoqi:",laoqi.author("China")
print "Author name from info:",info.author("Suzhou")

#運行結果

Author name from laoqi: LaoQi in China
Author name from info: LaoQi in Suzhou

這段代碼中,對author方法增加了一個參數address,當調用這個方法的時候:laoqi.author("China"),要對這個參數賦值,看官特別注意,在類中,這個方法顯示是有兩個參數(self,address),但是在調用的時候,第一個參數是自動將實例laoqi與之對應起來,不需要顯化賦值,可以理解成是隱含完成的(其實,也可以將laoqi看做隱藏的主體,偷偷地更self勾搭上了)。

通過上面的講述,看官可以試試類了。提醒,一定要對類的數據流通過程清晰。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37392.html

相關文章

  • [基礎python]編寫類之四再論繼承

    摘要:從運行結果可以看出,當子類繼承多個父類的時候,對于構造函數,只有第一個能夠被繼承,第二個就等掉了。重點看,類繼承了,同時,在構造函數中自己做了規定,也就是的構造函數是按照的意愿執行,不執行的內容,但是,還有一個方法,則繼承了這個方法。 在上一講代碼的基礎上,做進一步修改,成為了如下程序,請看官研習這個程序: #!/usr/bin/env python #coding:utf-8 c...

    BoYang 評論0 收藏0
  • [基礎python]類的細節

    摘要:在對象接口后包裝其實現的細節,從而隔離了代碼的修改對用戶產生的影響。類提供了一個新的本地作用域,最小化了變量名沖突。類其實并沒有結束,不過本講座到此對類暫告一段。 前面對類的有關內容已經描述不少了,其實話題遠遠沒有結束,不過對于初學者,掌握這些已經算是入門,在以后的實踐中,還需要進行體會和感悟。 這幾天和幾個朋友以各種途徑討論過OOP的相關問題,他們是:令狐蟲、Frank、晉劍、小馮...

    Fundebug 評論0 收藏0
  • [基礎python]編寫類之三子類

    摘要:運行繼承的父類運行結果這回運行結果有了變化,本來是運行類,但是繼承了,并且在初始化的構造函數中,引入的構造函數,所以,就運行的結果相應結果了。 關于類,看官想必已經有了感覺,看下面的代碼,請仔細閱讀,并看看是否能夠發現點什么問題呢? #!/usr/bin/env python #coding:utf-8 class Person: def __init__(self, na...

    dadong 評論0 收藏0
  • [基礎python]重回函數

    摘要:函數的基本結構中的函數基本結構函數名參數列表語句幾點說明函數名的命名規則要符合中的命名要求。在中,將這種依賴關系,稱之為多態。不要期待在原處修改的函數會返回結果比如一定要之用括號調用函數不要在導入和重載中使用擴展名或路徑。 在本教程的開始部分,就已經引入了函數的概念:《永遠強大的函數》,之所以那時候就提到函數,是因為我覺得函數之重要,遠遠超過一般。這里,重回函數,一是復習,二是要在已經...

    dmlllll 評論0 收藏0
  • [基礎python]傳說中的函數編寫條規

    摘要:關于函數的事情,總是說不完的,下面就羅列一些編寫函數的注意事項。函數具有獨立性。也就是常說的不要有太強的耦合性。要讓函數能夠獨立于外部的東西。函數實現的功能和目標要單一化。這跟前面的道理是一樣的,目的是降低耦合性。 關于函數的事情,總是說不完的,下面就羅列一些編寫函數的注意事項。特別聲明,這些事項不是我總結的,我是從一本名字為《Learning Python》的書里面抄過來的,順便寫成...

    mushang 評論0 收藏0

發表評論

0條評論

Dongjie_Liu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<