1. 程式人生 > >python @staticmethod和@classmethod的作用

python @staticmethod和@classmethod的作用

一般來說,要使用某個類的方法,需要先例項化一個物件再呼叫方法。

而使用@staticmethod或@classmethod,就可以不需要例項化,直接類名.方法名()來呼叫。

這有利於組織程式碼,把某些應該屬於某個類的函式給放到那個類裡去,同時有利於名稱空間的整潔。

既然@staticmethod和@classmethod都可以直接類名.方法名()來呼叫,那他們有什麼區別呢

從它們的使用上來看,

  • @staticmethod不需要表示自身物件的self和自身類的cls引數,就跟使用函式一樣。
  • @classmethod也不需要self引數,但第一個引數需要是表示自身類的cls引數。

如果在@staticmethod中要呼叫到這個類的一些屬性方法,只能直接類名.屬性名或類名.方法名。

而@classmethod因為持有cls引數,可以來呼叫類的屬性,類的方法,例項化物件等,避免硬編碼。

class A(object):  
    bar = 1  
    def foo(self):  
        print 'foo'  
 
    @staticmethod  
    def static_foo():  
        print 'static_foo'  
        print A.bar  
 
    @classmethod  
    def class_foo(cls):  
        print 'class_foo'  
        print
cls.bar cls().foo() A.static_foo() A.class_foo()

輸出
static_foo
1
class_foo
1
foo

相關推薦

python @staticmethod@classmethod作用

一般來說,要使用某個類的方法,需要先例項化一個物件再呼叫方法。 而使用@staticmethod或@classmethod,就可以不需要例項化,直接類名.方法名()來呼叫。 這有利於組織程式碼,把某些應該屬於某個類的函式給放到那個類裡去,同時有利於名稱空間的整潔。 既然@staticmethod和@clas

知識點 - python 裝飾器@staticmethod@classmethod區別使用

定義 整潔 參數 sel spa elf pri Go assm 1.通常來說,我們使用一個類的方法時,首先要實例化這個類,再用實例化的類來調用其方法 class Test(object): """docstring for Test""" def

python中的幾個高階問題詳解(__init__,裝飾器執行步驟,@staticmethod@classmethod區別,單例模式,魔法方法,object繼承與不繼承區別)

第一個問題,init 在定義一個類時,什麼時候用__init__函式,什麼時候不用,用不用有什麼區別? 首先__init__是為了初始化用的,但是初始化的時候不一定要用這個,直接定義也是可以的,比如 class A(object): test_a = '123' 而我們用__

6_python類方法中使用:修飾符@staticmethod@classmethod作用與區別,還有裝飾器@property的使用(20181205)

python類方法中使用:修飾符@staticmethod和@classmethod的作用與區別,還有裝飾器@property的使用 1 @staticmethod(靜態方法)和@classmethod(類方法)使用 1 @staticmethod和@c

Python 中的 @staticmethod@classmethod(關鍵詞:Python/靜態方法/類方法/@staticmethod/@classmethod

結合書籍,我的理解 靜態方法: 出現在類中,第 1 個引數不是例項、也不是類, 由 @staticmethod 裝飾的方法; 類方法: 出現在類中,第 1 個引數不是例項、而是類, 由 @classmethod 裝飾的方法。 class C: @staticmetho

pythonstaticmethodclassmethod

靜態方法:   靜態方法和C++及java等語言中的是一樣的,它可以通過類或類的例項來對其進行呼叫,而不需要傳入任何隱式的引數。類似於一個全域性引數。 class Teststaticmethod: def foo(): foo=staticmet

@staticmethod@classmethod作用與區別

一般來說,要使用某個類的方法,需要先例項化一個物件再呼叫方法。 而使用@staticmethod或@classmethod,就可以不需要例項化,直接類名.方法名()來呼叫。 這有利於組織程式碼,把某些應該屬於某個類的函式給放到那個類裡去,同時有利於名稱空間的整潔。 既然@

Python中的@staticmethod@classmethod的區別

一直搞不明白,類方法和靜態方法的區別,特意研究了一下,跟大家分享一下。 為了方便大家瞭解兩者的差別,以下的示例程式碼將有助於發現其中的差別: ``` class A(object): def foo(self, x): print "executing foo(%s, %s)" %

python 中* **的作用

先舉個 ** 使用的例子: data = {"a": 1, "b": 2} def foo(**kwargs): print kwargs foo(a=1, b=2)     # foo(data) # 這種呼叫data的方法會報錯>>>{'a': 1, 'b': 2}

手動實現staticmethodclassmethod裝飾器

首先,staticmethod和classmethod裝飾器是通過非資料描述符實現的。用法簡單,這裡就不細說了。 這裡主要分析一下staticmethod和classmethod是如何通過描述符實現的。 from functools import partial class StaticMethod:

Python中***的作用(課堂小結)

python col 表示 pan pre 小結 使用 code 打包 以前自學沒註意過參數的傳導中*和**的用法,這次趁著上課了解了一下,順便寫個隨筆記一下。 1.打包用法 在參數傳導中*args是不定長參數,傳入的參數是不限制個數的,比如 def bdc(*args)

Python中@property@classmethod@staticmethod

return 被調用 命令 成了 aps display init 命名空間 類的方法 前戲 首先,先要弄清楚一個類裏面的,各個組成部分都應該怎麽稱呼。   - 註:可能叫法會不太一樣。     關於@property 顧名思義:它的意思為‘屬性’。   

Python 中的 classmethod staticmethod

original Go got typeerror print ini 靜態 main method 類中最常用的方法是實例方法, 即通過通過實例作為第一個參數的方法。 舉個例子,一個基本的實例方法就向下面這個: class Kls(object): def

【面試必問】python實例方法、類方法@classmethod、靜態方法@staticmethod屬性方法@property區別

區別 實例 實例變量 對象 s參數 pro 當前 靜態方法 實例方法 【面試必問】python實例方法、類方法@classmethod、靜態方法@staticmethod和屬性方法@property區別 1、#類方法@classmethod,只能訪問類變量,不能訪問實例變量

python中@staticmethod、@classmethod實例方法

dir pri cep ear 代碼 應用 can 打印 靜態 1.形式上的異同點: 在形式上,Python中:實例方法必須有self,類方法用@classmethod裝飾必須有cls,靜態方法用@staticmethod裝飾不必加cls或self,如下代碼所示: 1

python靜態屬性@property、類方法@classmethod、靜態方法@staticmethod普通方法

靜態屬性:即將類的函式通過@property屬性封裝,封裝後例項呼叫該函式時,不再需要在函式後面加(),而是用類似呼叫資料屬性的方式直接呼叫函式名稱即可執行函式。 靜態屬性既可以訪問類的屬性,也可以訪問例項的屬性。 類方法:即在類的函式前加@classmethod屬性,函式第一個引數為cls類,表示該函式

python -類方法@classmethod靜態方法@staticmethod

Python中至少有三種比較常見的方法型別,即例項方法,類方法、靜態方法。它們是如何定義的呢? 如何呼叫的呢?它們又有何區別和作用呢? 首先,這三種方法都定義在類中。 例項方法 定義:第一個引數必須是例項物件,該引數名一般約定為“self”,通過它來傳遞例項的屬性和方法(也可以傳類的屬性

python中靜態方法(@staticmethod)類方法(@classmethod)的區別

方法 屬性方法 參數 pre 如果 icm ssm 使用 類方法 一般來說,要使用某個類的方法,需要先實例化一個對象再調用方法。 而使用@staticmethod或@classmethod,就可以不需要實例化,直接類名.方法名()來調用。 這有利於組織代碼,把某些應該屬於某

Python中的classmethodstaticmethod

參數 pri 類的屬性 method 而不是 blog pan bsp clas 首先,這是一個經典的問題。 我們首先做一個比較: classmethod的第一個參數是cls,即調用的時候要把類傳入 這意味著我們我們可以在classmethod裏使用類的屬性,而不是類的實例

Python 面向物件 - @classmethod & @staticmethod

@classmethod和@staticmethod很像,但他們的使用場景並不一樣。 類內部普通的方法,都是以self作為第一個引數,代表著通過例項呼叫時,將例項的作用域傳入方法內; @classmethod以cls作為第一個引數,代表將類本身的作用域傳入。無論通過類來