class foo(object):
def test(self)://定義了例項方法
print("object")
@classmethod
def test2(cls)://定義了類方法
print("class")
@staticmethod
def test3()://定義了靜態方法
print("static")
1、例項方法就是類的例項才能夠使用的方法,類無法直接呼叫。例項方法的兩種呼叫方式:
f=foo()//例項化類
f.test()//通過例項呼叫
foo.test(f)//直接通過類的方式呼叫,但是需要自己傳遞例項引用
2、靜態方法是一種普通函式,位於類定義的命名空間中,它不會對任何例項型別進行操作。使用裝飾器@staticmethod定義靜態方法。類物件和例項都可以呼叫靜態方法,
類方法的呼叫方式:
foo.test2();
如果foo有子類且子類覆蓋了這個類方法,呼叫foo2的test2()會呼叫子類的方法並傳遞的是子類的類物件。
class foo2(foo):
@classmethod
def test2(self):
print(self)
print("foo2 object")
f2=foo2()
print(f2.test2())
輸出是:
foo2 object
3、類方法是將類本身作為物件進行操作的方法。類方法使用@classmethod裝飾器定義,第乙個引數是類,約定寫為cls,類物件和例項都可以呼叫類方法,
靜態方法的呼叫方式:
ff.test3()
foo.test3
歸納如下:
呼叫方式:
三種方法都可以通過例項來呼叫
普通方法不能通過類名呼叫,但是靜態方法和類方法是可以的
許可權:靜態方法和類方法無法訪問例項屬性
類方法可以訪問類屬性,但是靜態方法不可以訪問類屬性
#普通方法,可以通過self訪問例項屬性
def normalmethod(self,data)
#類方法,可以通過cls訪問類屬性
@classmethod
def classmethod(cls,data)
#靜態方法,不可以訪問,通過傳值的方式
@staticmethod
def staticmethod(data)
python例項方法 靜態方法 類方法
class foo object deftest self 定義了例項方法 print object classmethod deftest2 clss 定義了類方法 print class staticmethod deftest3 定義了靜態方法 print static 1 例項方法就是類的例...
Python類方法 靜態方法 例項方法
靜態方法是指類中無需例項參與即可呼叫的方法 不需要self引數 在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。通常情況下,靜態方法使用 staticmethod裝飾器來宣告。class classa object staticmethod def func a print hel...
python例項方法 類方法和靜態方法
class testclassmethod object method method hoho def init self self.name leon def test1 self print test1 print self classmethod def test2 cls print cls...