欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中staticmethod和classmethod的作用與區(qū)別

 更新時間:2018年10月11日 09:46:42   作者:斜陽雨陌  
今天小編就為大家分享一篇關(guān)于Python中staticmethod和classmethod的作用與區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

一般來說,要使用某個類的方法,需要先實(shí)例化一個對象再調(diào)用方法。

而使用@staticmethod或@classmethod,就可以不需要實(shí)例化,直接類名.方法名()來調(diào)用。

這有利于組織代碼,把某些應(yīng)該屬于某個類的函數(shù)給放到那個類里去,同時有利于命名空間的整潔。

既然@staticmethod和@classmethod都可以直接類名.方法名()來調(diào)用,那他們有什么區(qū)別呢

從它們的使用上來看

  • @staticmethod不需要表示自身對象的self和自身類的cls參數(shù),就跟使用函數(shù)一樣。
  • @classmethod也不需要self參數(shù),但第一個參數(shù)需要是表示自身類的cls參數(shù)。

如果在@staticmethod中要調(diào)用到這個類的一些屬性方法,只能直接類名.屬性名或類名.方法名。

而@classmethod因?yàn)槌钟衏ls參數(shù),可以來調(diào)用類的屬性,類的方法,實(shí)例化對象等,避免硬編碼。

要明白,什么是實(shí)例方法、靜態(tài)方法和類方法:

class Demo(object):
 def instance_method(self, your_para):
 """
 this is an instance_method
 you should call it like the follow:
 a = Demo()
 a.instance_method(your_para)
 plus: in python, we denote 'cls' as latent para of Class
 while 'self' as latent para of the instance of the Class
 :param your_para: 
 :return: 
 """
 print("call instance_method and get:", your_para)
 @classmethod
 def class_method(cls, your_para):
 """
 this is a class_method
 you can call it like the follow:
 method1:
 a = Demo()
 a.class_method(your_para)
 method2:
 Demo.class_method
 plus: in python, we denote 'cls' as latent para of Class
 while 'self' as latent para of the instance of the Class
 :param your_para: 
 :return: 
 """
 print("call class_method and get:", your_para)
 @staticmethod
 def static_method(your_para):
 """
 this is a static_method and you can call it like the 
 methods of class_method
 :param your_para: 
 :return: 
 """
 print("call static_method and get:", your_para)

雖然類方法在調(diào)用的時候沒有顯式聲明cls,但實(shí)際上類本身是作為隱含參數(shù)傳入的。這就像實(shí)例方法在調(diào)用的時候也沒有顯式聲明self,但實(shí)際上實(shí)例本身是作為隱含參數(shù)傳入的。

對于靜態(tài)函數(shù),我們一般把與類無關(guān)也與實(shí)例無關(guān)的函數(shù)定義為靜態(tài)函數(shù)。例如入口檢查的函數(shù)就最好定義成靜態(tài)函數(shù)。

類方法的妙處, 在繼承中的作用:

class Fruit(object):
 total = 0 # 這是一個類屬性
 @classmethod
 def print_total(cls):
 print('this is the ', cls, '.total:', cls.total, ' and its id: ', id(cls.total)) # cls是類本身,打印類屬性total的值
 print('this is the Fruit.total:', Fruit.total, 'and its id: ', id(Fruit.total))
 print("=======================")
 @classmethod
 def set(cls, value):
 cls.total = value
class Apple(Fruit):
 pass
class Orange(Fruit):
 pass
app1 = Apple()
app1.set(10)
app1.print_total()
Apple.print_total()
Fruit.set(2)
app1.print_total()
Fruit.print_total()
"""
output:
this is the <class '__main__.Apple'> .total: 10 and its id: 1355201264
this is the Fruit.total: 0 and its id: 1355200944
=======================
this is the <class '__main__.Apple'> .total: 10 and its id: 1355201264
this is the Fruit.total: 0 and its id: 1355200944
=======================
this is the <class '__main__.Apple'> .total: 10 and its id: 1355201264
this is the Fruit.total: 2 and its id: 1355201008
=======================
this is the <class '__main__.Fruit'> .total: 2 and its id: 1355201008
this is the Fruit.total: 2 and its id: 1355201008
=======================
"""

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 導(dǎo)致python中import錯誤的原因是什么

    導(dǎo)致python中import錯誤的原因是什么

    在本篇文章里小編給大家整理了關(guān)于python的import錯誤原因以及相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Python爬蟲中的并發(fā)編程詳解

    Python爬蟲中的并發(fā)編程詳解

    Python爬蟲中的并發(fā)編程是一種優(yōu)化爬取速度、解決阻塞問題、優(yōu)化資源利用的方式。常用的并發(fā)編程模塊包括多線程、多進(jìn)程、協(xié)程等,通過并發(fā)處理多個任務(wù),可以提高爬取效率,節(jié)省爬蟲資源利用成本。同時,還需注意線程安全、共享資源問題等并發(fā)編程中的常見陷阱
    2023-05-05
  • Python通過matplotlib繪制動畫簡單實(shí)例

    Python通過matplotlib繪制動畫簡單實(shí)例

    這篇文章主要介紹了Python通過matplotlib繪制動畫簡單實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Centos7 Python3下安裝scrapy的詳細(xì)步驟

    Centos7 Python3下安裝scrapy的詳細(xì)步驟

    這篇文章主要介紹了Centos7 Python3下安裝scrapy的詳細(xì)步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Keras中Conv1D的使用及說明

    Keras中Conv1D的使用及說明

    這篇文章主要介紹了Keras中Conv1D的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 利用Python小工具實(shí)現(xiàn)3秒鐘將視頻轉(zhuǎn)換為音頻

    利用Python小工具實(shí)現(xiàn)3秒鐘將視頻轉(zhuǎn)換為音頻

    這篇文章主要介紹了利用Python小工具實(shí)現(xiàn) 3秒鐘將視頻轉(zhuǎn)換為音頻效果,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 淺談matplotlib 繪制梯度下降求解過程

    淺談matplotlib 繪制梯度下降求解過程

    這篇文章主要介紹了淺談matplotlib 繪制梯度下降求解過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Django日志模塊logging的配置詳解

    Django日志模塊logging的配置詳解

    日志在程序開發(fā)中是少不了的,通過日志我們可以分析到錯誤在什么地方,有什么異常。在生產(chǎn)環(huán)境下有很大的用處。在java 開發(fā)中通常用 log4j,logback 等三方組件。下面這篇文章主要介紹了Django日志模塊logging的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • 快速解決jupyter notebook啟動需要密碼的問題

    快速解決jupyter notebook啟動需要密碼的問題

    這篇文章主要介紹了快速解決jupyter notebook啟動需要密碼的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 解決Djang2.0.1中的reverse導(dǎo)入失敗的問題

    解決Djang2.0.1中的reverse導(dǎo)入失敗的問題

    今天小編就為大家分享一篇解決Djang2.0.1中的reverse導(dǎo)入失敗的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論