數據流轉過程
除了在類中可以寫這種函數之外,在類中還可以寫別的函數,延續上一講的例子:
代碼如下:
#!/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"
新聞熱點
疑難解答