首先記住: 面向對象的三大特點是 數據封裝、繼承和多態
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)來調用。
類的一些相關知識: