亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

跟老齊學Python之編寫類之二方法

系統 1778 0

數據流轉過程

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

復制代碼 代碼如下:

#!/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),這個我們先不管,稍后會詳細分解。首先看看數據是如何在這個代碼中流轉的。為了能夠清楚,畫一張圖,所謂一圖勝千言萬語,有圖有真相。

跟老齊學Python之編寫類之二方法_第1張圖片

定義類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勾搭上了)。

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产一级毛片夜一级毛片 | 亚洲午夜国产精品无卡 | 日本欧美一区二区三区在线观看 | 亚洲成人在线视频 | 亚洲精品国精品久久99热 | 伊人精品综合 | 国产精品一区在线免费观看 | 国产成人h综合亚洲欧美在线 | 激情视频日本 | 欧美一级毛片免费看 | 手机看片高清国产日韩片 | 亚洲精品久久99久久一 | 日本精品久久久久中文字幕 1 | 亚洲一区二区免费视频 | 国产精品激情综合久久 | 国产在线精品二区赵丽颖 | 天天做天天操 | 国产精品第六页 | 在线观看免费情网站大全 | 最新国产午夜精品视频成人 | 亚洲图片另类图片 | 日本特级毛片 | 久久综合免费视频 | 成人亚洲性情网站www在线观看 | 免费一级大毛片a一观看不卡 | 四虎免费在线播放 | 青青青免费高清视频在线 | 尹人香蕉网在线观看视频 | 久久精品中文字幕第一页 | 精品一久久 | 狠狠五月婷婷 | 四虎精品成在线播放 | 精品一区二区三区免费视频 | 日韩欧美亚洲在线 | 精品伊人| 日韩成人在线视频 | 久久综合九色综合狠狠97 | 欧美亚洲网 | 亚洲国产精品日韩在线观看 | 中文字幕欧美日韩在线不卡 | 日本亚洲欧美美色 |