溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

pyhton數(shù)據(jù)挖掘self原理是什么

發(fā)布時(shí)間:2021-11-22 15:46:44 來(lái)源:億速云 閱讀:105 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“pyhton數(shù)據(jù)挖掘self原理是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“pyhton數(shù)據(jù)挖掘self原理是什么”吧!

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

Class: 可以理解為一個(gè)組裝工廠。假如我們要生產(chǎn)一個(gè)機(jī)器人,那我們先要搭個(gè)工廠吧。先確定:我們要先安裝胳膊,再安裝頭,我們的小破機(jī)器人的流水線就搭好了。這個(gè)工廠比較智能,胳膊和頭的數(shù)量都可以調(diào)。

class BuildRobot():
    def __init__(self,armcount,headcount):
        self.armcount = armcount
        self.headcount = headcount

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

這個(gè)時(shí)候你可以run一下,這樣你的class就搭好了??墒沁@時(shí)的工廠,因?yàn)槟銢](méi)有開(kāi)始生產(chǎn),是沒(méi)有任何產(chǎn)出的。下面就是instance

instance:可以理解為啟動(dòng)一次工廠生產(chǎn)出的機(jī)器人?,F(xiàn)在我們用之前搭的工廠生產(chǎn)一個(gè)正常一點(diǎn)的機(jī)器人,兩個(gè)胳膊一個(gè)腦袋:

normal_robot = BuildRobot(2,1)

查看一下胳膊數(shù)對(duì)不對(duì)?

我們?cè)賮?lái)一個(gè) 不太正常的機(jī)器人:

weird_robot = BuildRobot(4,1)

normal_robot 和weird_robot 都是instance。他們雖然胳膊數(shù)量不一樣,但是本質(zhì)上都是由這個(gè)class造出來(lái)的,由胳膊和頭組成的機(jī)器人。

object: 這個(gè)就比較麻煩了,大部分情況下,object和instance的含義是一樣的,都是指這個(gè)造出來(lái)的robot。這兩者的區(qū)別,只是在英語(yǔ)語(yǔ)言環(huán)境下的區(qū)別:

normal_robot is an instance of ‘buildrobot'

normal_robot is a ‘buildrobot' object

上面這兩個(gè)說(shuō)法是等價(jià)的。

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

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

舉個(gè)栗子:

還是上面的工廠,我們現(xiàn)在加裝一個(gè)車(chē)間,負(fù)責(zé)把胳膊上色:

class BuildRobot():
    def __init__(self,armcount,headcount):
        self.armcount = armcount
        self.headcount = headcount
    def paintarm(self,color):
        print("paint arm:",color)

這個(gè)paintarm,就是一個(gè)method。還是一樣,現(xiàn)在這個(gè)class沒(méi)有生產(chǎn),因此這個(gè)method也沒(méi)有任何實(shí)際的產(chǎn)品出來(lái)。我們只能先生產(chǎn)出一個(gè)instance來(lái):

colorful_robot = BuildRobot(2,1)

好的我們現(xiàn)在有一個(gè)兩個(gè)胳膊一個(gè)頭的robot了。這時(shí),我們的robot還是沒(méi)有上色的,因?yàn)槲覀儧](méi)有讓這個(gè)instance進(jìn)入上色的那個(gè)車(chē)間。現(xiàn)在我們讓這個(gè)robot進(jìn)入車(chē)間,涂個(gè)紅色。

colorful_robot.paintarm('red')

paint arm: red

上面的過(guò)程,就是call這個(gè)paintarm method。幾個(gè)點(diǎn):

如果沒(méi)有先造一個(gè)機(jī)器人,這個(gè)車(chē)間就沒(méi)有辦法給胳膊上色,因此要上色,就必須先造一個(gè)機(jī)器人出來(lái)。所以,method是依賴于instance的。

這個(gè)車(chē)間只能給這個(gè)工廠產(chǎn)出的robot的胳膊上色,你從別的工廠拿一個(gè)車(chē)過(guò)來(lái)讓他上色,他是不干的。因此,method是依賴于class的。只有這個(gè)class創(chuàng)建的instance,才能call這個(gè)method。

假如我把上色這個(gè)活,外包了。我就在外面另建了個(gè)工廠,專門(mén)上色,這就是function:

def outsourcing_paint(robot,color):
    print("paint",robot,"arm:",color)

outsourcing_paint(colorful_robot,'red')

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

這個(gè)外包的上色工廠,不管你這個(gè)東西是從哪個(gè)工廠來(lái)的,無(wú)論你是個(gè)機(jī)器人還是機(jī)器狗,反正我就拿來(lái),給胳膊上色。

看到這里,應(yīng)該就明白function和method的區(qū)別了。

注意method其實(shí)有兩種,一種是instance method,一種是class method。

  • instance method就相當(dāng)于對(duì)于機(jī)器人這個(gè)產(chǎn)品進(jìn)行各種修改的車(chē)間。我給機(jī)器人上色,不影響我這個(gè)工廠的外形對(duì)吧?

  • class method,是對(duì)這個(gè)工廠,這個(gè)class的屬性進(jìn)行修改的車(chē)間,比如我有一個(gè)車(chē)間負(fù)責(zé)把工廠涂成紅色的。這個(gè)行為并不影響我造出來(lái)的機(jī)器人的大小顏色屬性。

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

3. 重點(diǎn)SELF分析

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

outsourcing_paint(colorful_robot,'red')
  • 在function里面,是沒(méi)有self的。因?yàn)槲覀兏嬖V了外包工廠,給誰(shuí)上色。所以在定義外包工廠function時(shí),我們有兩個(gè)input variables:robot 和 color。

colorful_robot.paintarm('red')
  • 然鵝在使用method的時(shí)候,我們只告訴了車(chē)間,我要紅色。那這個(gè)車(chē)間怎么知道,給哪個(gè)機(jī)器人上色???是給normal robot還是給colorful robot?因?yàn)槲覀冊(cè)赾all這個(gè)method的時(shí)候,使用了colorful_robot.paintarm()這個(gè)格式,于是paintarm這個(gè)method就知道,哦,我要給這個(gè)colorful_robot上色。

  • 在python里,要想使instance.method()這個(gè)格式可以正常工作,在class里面編寫(xiě)method的時(shí)候,就必須把變量的第一個(gè)位子留出來(lái),用來(lái)指代未來(lái)call這個(gè)method的instance。就相當(dāng)于我們?cè)诖罱ńo胳膊上色的這個(gè)車(chē)間的時(shí)候,就必須預(yù)留一個(gè)入口來(lái)放入已經(jīng)生產(chǎn)出來(lái)的機(jī)器人。

  • 留出來(lái)的這個(gè)位子,可以叫任何名字。只不過(guò)為了代碼的優(yōu)美,大部分人選擇使用self,來(lái)指代使用這個(gè)method的instance他自己。

到此,相信大家對(duì)“pyhton數(shù)據(jù)挖掘self原理是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI