搜尋

首頁  >  問答  >  主體

Python种staticmethod和classmethod有什么区别,具体用法呢。什么时候用。

黄舟黄舟2766 天前460

全部回覆(6)我來回復

  • 迷茫

    迷茫2017-04-17 16:27:00

    staticmethod並不是因為不想創建實例才聲明的,而是聲明該方法不會更改實例本身的資料。

    classmethod也不是因為不想創建實例才聲明的,而是為了實現對類別本身的操作(傳入cls之後就可以對自身的屬性和方法進行操作)。

    只是個人淺薄的見解,供題主參考一下。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 16:27:00

    一點點淺顯理解
    或許有用

    淺聊Python class中的@staticmethod以及@classmethod

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 16:27:00

    直觀上看,classmethod和staticmethod的函數簽名不一樣,一個是有參的,一個是無參的。
    都屬於python的裝飾器,注意在classmethod裡,參數不一定必須是cls,可以是任何被命名的變數。在不涉及到父子類別的時候,這2者行為看起來是一樣的,但如果設計到父子類別的時候,classmethod可以判斷出呼叫的子類別物件

    # -*- coding: utf-8 -*-
    
    class Parent(object):
    
        @staticmethod
        def staticSayHello():
            print "Parent static"
    
        @classmethod
        def classSayHello(anything):  #这里是anything
            if anything == Boy:
                print "Boy classSayHello"
            elif anything == Girl:
                print "girl sayHello"
    
    
    class Boy(Parent):
         pass
    
    class Girl(Parent):
        pass
    
    if __name__ == '__main__':
        Boy.classSayHello()
        Girl.classSayHello()
    

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 16:27:00

    static 和 class 還有 普通的內部方法的區別除了用法上的細微差別 主要還是考慮到程式碼隔離上。 static 不需要任何類別和實例的資訊。 class 需要類別的資訊。 普通方法需要 instance 實例資訊。不用太在意這些細節。當你不明白的時候都寫成普通方法好了。當你感覺到有需要的時候就知道要改用哪一個了。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:27:00

    雷雷

    回覆
    0
  • 阿神

    阿神2017-04-17 16:27:00

    在一門物件導向物件語言中,static通常表示被修飾的方法或變數不屬於實例,而是屬於類別。 static通常意味着被修饰的方法或者变量不属于实例,而是属于类。

    静态方法的作用在于:如何一个方法需要在不构造实例的情况下调用,那么这个方法就需要被定义成静态。静态方法不能被override

    靜態方法的作用在於:如何一個方法需要在不建構實例的情況下調用,那麼這個方法就需要被定義成靜態。靜態方法不能被override,也不具備大部分OO特性,靜態方法實際上存在過程式語言的想法。

    根據自己寫Python程式碼的經驗,物件導向在Python中用起來有點生硬,像是static方法和函數不知道要選誰。所以,建議專注學習Python自己獨特的特性,而不是OO。 🎜

    回覆
    0
  • 取消回覆