您現在的位置是:首頁 > 人文

我們既要吃過豬肉,也要見過豬跑。

由 Python空間 發表于 人文2022-03-19
簡介get_name()print(name)執行之後的結果是:rocky上面的例子就說明,在例項化以後 boy 和 self 都引用了例項化物件,但是雖然這樣是可以的,在實際的程式設計裡建議你還是不要這麼寫,因為如果你這麼寫的話,會把這個類當

沒吃過豬肉也見過豬跑吧同義

我們既要吃過豬肉,也要見過豬跑。

“沒吃過豬肉,也看過豬跑” 已經成為過去式了,現在的我們要 “即要吃過豬肉,也要見過豬跑”。題目只是逗大家一笑的事兒,本質的意思是想大家在學習的時候要 “

知其然知其所以然

”。

所以今天還是一篇技術文章,既然你點進來了,就看到底嘛,反正也不長。

我們這個星期一直在學 “類” 的相關知識,如果你看過我前面的幾篇文章,你應該知道:將類例項化,透過例項來執行各種方法,應用例項的屬性是做常規操作。但是,你在學習的過程中是否注意過其中的「資料流轉」是什麼樣的?相信大多數人都沒有重視過,或者說沒有這個概念,這個東西其實很重要,今天我們就來說這個「資料流轉」的問題。

首先我們先來看一個例子:

classPerson:

def__init__(self,name):

self。name = name

defget_name(self):

returnself。name

defage(self,n):

self。age = n

defcolor(self,color):

print(‘{0} is {1}’。format(self。name,color))

defhow_old(self):

print(‘{0} age is {1}’。format(self。name,self。age))

boy = Person(‘rocky’)

boy。age(23)

boy。color(‘black’)

boy。how_old()

上面的例子的執行結果是什麼呢?請先思考一下,如果你思考完了,請接著往下看:

rocky is black

rocky age is23

不知道和你的答案是不是一樣呢?建立例項 boy = Person(‘rocky’),將例項物件的引用也傳給了 self,將 self 和 boy 進行比較,簡單點說就是 self 和 boy 都引用了例項物件,但是 self 主要管裡面,boy 主要管外面。

‘rocky’ 呢就是一個具體的資料,透過初始化方法中的 name 引數,傳給 self。name。其實更準確的來說是傳了物件屬性給例項的屬性 name,如果覺得不理解的化,請看一下昨天的文章 —— 連今天是七夕你都不知道?活該你 self!

在類 Person 的其它方法中,都是以 self 作為第一個或者唯一的一個引數,這裡需要主要的是,和其它程式語言不同,在 Python 中這個 self 這個引數是要顯式的寫上,在類的內部是不能省略的。這樣的好處是所有的方法都承接 self 例項物件,它的屬性也自然而然的可以被其它方法所引用。

如果你想把類中的資料從類的裡面傳到外面,可以透過 return 實現,比如我們在例子中的 get_name() 方法。因為引用例項物件的變數是 boy 和 self,所以在類裡面其實是可以用 boy 代替 self,請看下面修改後的例子:

classPerson:

def__init__(self,name):

self。name = name

defget_name(self):

#return self。name

return boy。name

boy = Person(‘rocky’)

name = boy。get_name()

print(name)

執行之後的結果是:

rocky

上面的例子就說明,在例項化以後 boy 和 self 都引用了例項化物件,但是雖然這樣是可以的,在實際的程式設計裡建議你還是不要這麼寫,因為如果你這麼寫的話,會把這個類當成一個專門為了 boy 而私人定製的一個類,從而再無法用這個類生成別的例項。這裡我這麼寫的原因,完全是為了讓你更好的理解。

如果你看到這的話,恭喜你你又賺了。我沒騙人,今天就這一個知識點,學到就是賺到,很容易消化吸收,我一再強調,基礎很重要,往往你忽視的就是你以後要遇到的大坎兒。

七夕也結束了,該努力學習工作啦,要對的起昨天在你身邊陪你的那個人。

The end。

知其然知其所以然

推薦文章