python 類的靜態方法@staticmethod


一般來說,要使用某個類的方法,需要先實例化一個對象再調用方法
而使用@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()  

就是不用對象調用,直接用類來調用

 

Python類中普通方法調用自身的靜態方法,使用self.函數名()

import numpy as np

class A(object):
    def foo(self):
        self.static_foo()

    @staticmethod
    def static_foo():
        print( 'This is static_foo.')

if __name__ == "__main__":
    test = A()
    test.foo()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM