python @staticmethod和@classmethod


首先記住: 面向對象的三大特點是 數據封裝、繼承和多態

python 其實有3個方法,即靜態方法(@staticmethod),類方法(@classmethod)和實例方法;

class A(object):
    def foo(self,x):
        print u"A類下函數foo的參數:",x
    @classmethod#類方法
    def class_foo(cls,x):
        print u"A類下函數class_foo的參數:",x

    @staticmethod
    def static_method(x):
        print u"A類下函數static_foo的參數:",x


a=A()
a.foo("w")
a.class_foo("e")
a.static_method("r")

# A.foo("t")報錯
A.static_method("Y")
A.class_foo("U")

普通實例方法,第一個參數需要是self,它表示一個具體的實例本身。

靜態方法

如果用了裝飾器@staticmethod,那么就可以無視這個self,而將這個方法當成一個普通的函數使用。

類方法

而對於裝飾器@classmethod,它的第一個參數不是self,是cls,它表示這個類本身。

 

注意:

實例方法的調用離不開實例,需要把實例自己傳給函數,所有類里的函數需要foo(sel,x),類方法一樣,只不過他傳遞的是類不是實例,A.class_foo(x);

對於靜態方法和普通的方法一樣,不需要對誰進行綁定,唯一的區別是調用的時候需要使用a.static_foo(x)或者A.static_foo(x)來調用。

 

 類的一些相關知識:

 

 

 

 

 


免責聲明!

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



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