一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - pyhton學習與數據挖掘self原理及應用分析

pyhton學習與數據挖掘self原理及應用分析

2022-03-05 14:53Python學習與數據挖掘 Python

這篇文章主要為大家介紹了深入分析pyhton中的self原理及應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪

對,你沒看錯,這是我初學 python 時的靈魂發問。

我們總會在class里面看見self,但是感覺他好像也沒什么用處,就是放在那里占個位子。

如果你也有同樣的疑問,那么恭喜你,你的class沒學明白。

所以,在解釋self是誰之前,我們先明確幾個問題:

  • 什么是class,什么是instance?
  • 什么是object? 什么是method,什么是function?

一個畫外音,我個人是比較反對在編程中,對本來是英文的專有名詞進行中文翻譯的。正所謂語言塑造了思維,因此一些專有名詞一旦翻譯過來,無論你翻譯的多好,總會有一定程度的語意模糊。比如說“class”,我們在看到這個詞的瞬間會聯想到“課”,但是翻譯過來就是“類”,于是我們會不自覺地,去按照“課”或者“一大類”去理解這個專有名詞。這是一種非常嚴重的潛在的誤導,因為class這個專有名詞和“課”或者“一大類”關系都不太大。所以還不如不翻譯,就當不知道這個詞啥意思,在學習的過程中再慢慢理解他代表的意思。

其實因為英文的局限性,很多編程語言里的專屬名詞也是大佬們一拍腦袋,瞎起的。。比如我吐槽了無數次的matplotlib里面的axes。。。

又說多了。。。回到正題。

1. 什么是class,什么是instance,什么是object?

Class: 可以理解為一個組裝工廠。假如我們要生產一個機器人,那我們先要搭個工廠吧。先確定:我們要先安裝胳膊,再安裝頭,我們的小破機器人的流水線就搭好了。這個工廠比較智能,胳膊和頭的數量都可以調。

?
1
2
3
4
class BuildRobot():
    def __init__(self,armcount,headcount):
        self.armcount = armcount
        self.headcount = headcount

所以這里的class,就是搭了一個工廠叫BuildRobot。'__init__' 就是告訴這個流水線,首先你需要這個機器人有幾個胳膊(‘armcount'),有幾個腦袋(‘headcount')。先忽略一下這里的self,以后講。

這個時候你可以run一下,這樣你的class就搭好了。可是這時的工廠,因為你沒有開始生產,是沒有任何產出的。下面就是instance

instance:可以理解為啟動一次工廠生產出的機器人。現在我們用之前搭的工廠生產一個正常一點的機器人,兩個胳膊一個腦袋:

?
1
normal_robot = BuildRobot(2,1)

查看一下胳膊數對不對?

我們再來一個 不太正常的機器人:

?
1
weird_robot = BuildRobot(4,1)

normal_robot 和weird_robot 都是instance。他們雖然胳膊數量不一樣,但是本質上都是由這個class造出來的,由胳膊和頭組成的機器人。

object: 這個就比較麻煩了,大部分情況下,object和instance的含義是一樣的,都是指這個造出來的robot。這兩者的區別,只是在英語語言環境下的區別:

normal_robot is an instance of ‘buildrobot'

normal_robot is a ‘buildrobot' object

上面這兩個說法是等價的。

2. 什么是method,什么是function?

兩者都由def定義,稍微粗糙一點的理解就是,在class里面的function叫method。所以,method是和class,instance有關的一種function。

舉個栗子:

還是上面的工廠,我們現在加裝一個車間,負責把胳膊上色:

?
1
2
3
4
5
6
class BuildRobot():
    def __init__(self,armcount,headcount):
        self.armcount = armcount
        self.headcount = headcount
    def paintarm(self,color):
        print("paint arm:",color)

這個paintarm,就是一個method。還是一樣,現在這個class沒有生產,因此這個method也沒有任何實際的產品出來。我們只能先生產出一個instance來:

?
1
colorful_robot = BuildRobot(2,1)

好的我們現在有一個兩個胳膊一個頭的robot了。這時,我們的robot還是沒有上色的,因為我們沒有讓這個instance進入上色的那個車間。現在我們讓這個robot進入車間,涂個紅色。

?
1
colorful_robot.paintarm('red')

paint arm: red

上面的過程,就是call這個paintarm method。幾個點:

如果沒有先造一個機器人,這個車間就沒有辦法給胳膊上色,因此要上色,就必須先造一個機器人出來。所以,method是依賴于instance的。

這個車間只能給這個工廠產出的robot的胳膊上色,你從別的工廠拿一個車過來讓他上色,他是不干的。因此,method是依賴于class的。只有這個class創建的instance,才能call這個method。

假如我把上色這個活,外包了。我就在外面另建了個工廠,專門上色,這就是function:

?
1
2
3
4
def outsourcing_paint(robot,color):
    print("paint",robot,"arm:",color)
 
outsourcing_paint(colorful_robot,'red')

paint <__main__.BuildRobot object at 0x116b434a8> arm: red

這個外包的上色工廠,不管你這個東西是從哪個工廠來的,無論你是個機器人還是機器狗,反正我就拿來,給胳膊上色。

看到這里,應該就明白function和method的區別了。

注意method其實有兩種,一種是instance method,一種是class method。

  • instance method就相當于對于機器人這個產品進行各種修改的車間。我給機器人上色,不影響我這個工廠的外形對吧?
  • class method,是對這個工廠,這個class的屬性進行修改的車間,比如我有一個車間負責把工廠涂成紅色的。這個行為并不影響我造出來的機器人的大小顏色屬性。

本篇的討論,我們先限定在instance method里。

3. 重點SELF分析

把class, method講明白以后,終于能講self了。通過上面的例子,我們注意到

?
1
outsourcing_paint(colorful_robot,'red')
  • 在function里面,是沒有self的。因為我們告訴了外包工廠,給誰上色。所以在定義外包工廠function時,我們有兩個input variables:robot 和 color。
?
1
colorful_robot.paintarm('red')
  • 然鵝在使用method的時候,我們只告訴了車間,我要紅色。那這個車間怎么知道,給哪個機器人上色啊?是給normal robot還是給colorful robot?因為我們在call這個method的時候,使用了colorful_robot.paintarm()這個格式,于是paintarm這個method就知道,哦,我要給這個colorful_robot上色。
  • 在python里,要想使instance.method()這個格式可以正常工作,在class里面編寫method的時候,就必須把變量的第一個位子留出來,用來指代未來call這個method的instance。就相當于我們在搭建給胳膊上色的這個車間的時候,就必須預留一個入口來放入已經生產出來的機器人。
  • 留出來的這個位子,可以叫任何名字。只不過為了代碼的優美,大部分人選擇使用self,來指代使用這個method的instance他自己。

總結

  1. self是在為class編寫instance method的時候,放在變量名第一個位子的占位詞。
  2. 在具體編寫instance method里,可以不使用self這個變量。
  3. 如果在method里面要改變instance的屬性,可以用self.xxxx來指代這個屬性進行修改。

所以self, 就是指由這個class造出來的instance嘛。

以上就是pyhton學習與數據挖掘self原理及應用分析的詳細內容,更多關于pyhton數據挖掘self分析的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/weixin_38037405/article/details/120377125

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色综七七久久成人影 | 狠狠做五月深爱婷婷天天综合 | 十大免费b2b网站 | 牛牛色婷婷在线视频播放 | 偷偷操不一样 | 柔术一级毛片 | 齐天大性之七仙女欲春迅雷链接 | 视频在线观看一区二区 | 192.168.191 | 乖女的嫩奶水h文孕妇 | 韩国女主播一区二区视频 | 91精品国产综合久 | 国产精品一级视频 | 四缺一的小说 | 久青草国产97香蕉在线视频 | chinese男男gay| 全肉一女n男np高h乳 | 久久内在线视频精品mp4 | 亚洲男女在线 | 欧美日韩一区二区三区在线观看 | 美味情缘韩国在线观看视频 | 国产亚洲人成网站在线观看不卡 | 九九热在线视频观看这里只有精品 | 亚洲视频在线免费 | 好大用力深一点女公交车 | 小女生RAPPER入口 | 日本一道本中文字幕 | 亚洲成av人片在线观看天堂无码 | 97精品国产自在现线免费 | 爱爱小视频免费看 | 99精品视频只99有精品 | cosplay 极品videos | 国产大秀视频 | 美女和男人一起差差 | 日韩高清在线观看 | 岛国a香蕉片不卡在线观看 荡女淫春2古装 | xxxxx性中国hd | 美女无遮挡 | videos欧美肥婆 | 色狠狠色狠狠综合天天 | 四虎永久网址影院 |