python函数和类的区别_Python中类中的方法还有区别?
上一篇,我們講到Python類中的屬性是有區別的,愛思考的小伙伴們可能就會問了,Python中的方法是不是也有區別呢?是的,而且Python中的方法區別更大,讓我們來看看吧~
Python類中的三種方法
Python中的方法可以分為三類:
實例方法:第一個參數是實例對象?self,必須通過實例去調用。
類方法:需要在方法前加?@classmethod 修飾,第一個參數是類本身,一般寫作cls,類和實例都可以調用。
靜態方法:需要在方法前加?@staticmethod修飾,沒有隱含傳遞的參數:方法體中不能使用類或實例的任何屬性和方法
這里的@classmethod 和 @staticmethod 都是函數裝飾器(Decorators),簡單來說它是一個修改其它函數的功能的函數。具體的細節涉及到Python更深層的東西。在這里我們只需要了解只要它倆出現,那么這個方法就是類方法或者靜態方法。
看過上一篇的小伙伴們應該都知道self是什么了,在這里簡單再說一下,我們可以使用self指代的是當前的實例,相當于每個實例的鑰匙,根據self,每個實例只能調用自己的變量和方法。
是不是看完還是覺得有點繞呢~為了更清楚地了解這三個方法的差異,我們還是拿例子來進行講解
在這個例子里面,我們定義了一個類Student,小伙伴們應該會發現,我們在Student類里定義了一個類屬性grade和兩個實例屬性age和height。然后我們分別定義了三個方法,根據剛開始我們給的三種方法的介紹,小伙伴們能不能看出這三個方法分別屬于哪一種呢?
這個不難~
print_age方法是一個實例方法,它的第一個參數是self,前面沒有任何的修飾。
print_grade方法是一個類方法,他的第一個參數是cls,前面使用@classmethod修飾。
Print_info方法是一個靜態方法,他沒有任何的參數,前面使用@staticmethod修飾
我們在定義完Student類后,我們分別使用類Student和實例tom去調用這三個方法,看看會發生什么~
大家觀察代碼第15-22行可以看到,當我們使用類Student調用print_age方法時,它會報錯,顯示缺少一個參數self。這是因為這里不是這時還沒有類的實例,而且方法中的self.age屬性也不存在,這時候是不能調用實例方法的。而我們使用類Student調用print_grade方法就沒有問題,因為我們已經聲明這是個類方法,而且grade這個屬性在類中已經定義好了。同樣,因為我們已經聲明print_info是靜態方法,所以調用也是沒有問題的。
我們也根據Student類生成了一個實例tom,然后我們使用實例tom去調用這三個方法,看看會發生什么~
如上面的代碼所示,三個方法都正確的輸出了結果,表明這三種方法都可以被類的實例調用。
我也給小伙伴們制作了一個簡單的表格,方便大家查詢。
實際使用中如何選擇三種方法
那么說了這么多,比較了這三種方法的差異,那么為什么會有這三種方法的區別呢?因為他們對于不同屬性的調用有所區別,可被調用的對象不同,所以在實際使用中就是根據這些差異來選擇最合適的方法。
實例方法是類中最普遍的方法,我們通常定義的都是實例方法,不需要多說了。
關于類方法,如果說我現在要定義一個方法,這個方法只需要調用類屬性,也只在把類當作一個對象使用的時候才會需要這個方法,或者說在邏輯上采用類本身作為對象來調用更合理,這時候就應該使用類方法。
關于靜態方法,我們可以發現它不需要任何的參數,不會涉及到類中的屬性和方法的操作。本質上說它只是在邏輯上邏輯上屬于類,但是和類本身沒有關系,在碰到這種情況時可以定義靜態方法。
結束語
在Python的類中,不同的方法有不同的應用范圍,根據自己的實際需求,選擇合適的方法,才能發揮每個方法最大的用處。小伙伴們快快試起來吧~
總結
以上是生活随笔為你收集整理的python函数和类的区别_Python中类中的方法还有区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vba显示正在加载_简单、易用的VBA过
- 下一篇: win10去掉快捷方式小箭头_简单几步,