方法
普通方法璃饱、靜態(tài)方法和類方法,三種方法在內(nèi)存中都?xì)w屬于類肪康,區(qū)別在于調(diào)用方式不同荚恶。
- 普通方法:由對(duì)象調(diào)用;至少一個(gè)self參數(shù)磷支;執(zhí)行普通方法時(shí)谒撼,自動(dòng)將調(diào)用該方法的對(duì)象賦值給self;
- 類方法:由類調(diào)用雾狈; 至少一個(gè)cls參數(shù)廓潜;執(zhí)行類方法時(shí),自動(dòng)將該類賦給cls善榛;
- 靜態(tài)方法:由類調(diào)用辩蛋;無(wú)默認(rèn)參數(shù);
class Foo(object):
def __init__(self,name):
self.name = name
def ord_func(self):
print("普通方法")
@classmethod
def class_func(cls):
"""定義類方法移盆,至少一個(gè)cls參數(shù)"""
print("類方法")
@staticmethod
def static_func():
"""定義靜態(tài)方法悼院,無(wú)默認(rèn)參數(shù)"""
print("靜態(tài)方法")
#調(diào)用普通方法
f = Foo('wupeiqi')
f.ord_func()
#調(diào)用類方法(類方法只能通過(guò)cls訪問(wèn)類屬性)
Foo.class_func()
#調(diào)用靜態(tài)方法(一個(gè)通過(guò)類調(diào)用的普通函數(shù),不能直接訪問(wèn)類的任何屬性或方法)
Foo.static_func()
相同點(diǎn):對(duì)于所有的方法而言,均屬于類(非對(duì)象)中咒循,所以据途,在內(nèi)存中也只保存一份绞愚。
不同點(diǎn):方法調(diào)用者不同、調(diào)用方法時(shí)自動(dòng)傳入的參數(shù)不同颖医。
屬性方法
@property裝飾器可以使被裝飾的方法成為一個(gè)屬性位衩,類似其他語(yǔ)言的get方法
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property #實(shí)例.score 調(diào)用
def score(self):
return self.__score
@score.setter #實(shí)例.score = value 調(diào)用
def score(self,score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
@score.deleter #del 實(shí)例.score 調(diào)用
def score(self):
del self.__score
print("score is deleted")
s = Student('Bob',59)
s.score = 60 #將60 賦給score 1
print(s.score)
# s.score = 1000 #將會(huì)觸發(fā)異常 2
del s.score
60
score is deleted
從上面可以看出,通過(guò)@property裝飾的屬性方法能夠?qū)傩苑庋b更多想要的操作