十、靜態屬性、類方法、靜態方法
阿新 • • 發佈:2019-03-14
一個數 靜態屬性 init 綁定 span cme 外部 sel idt
一、靜態屬性@property
封裝函數屬性內部邏輯,便於影藏函數屬性內部邏輯,外部調用時,以變量屬性的方式調用
class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh r1=Room(‘房間101‘,‘alex‘,10,10,2) r2=Room(‘房間102‘,‘han‘,5,5,3) #需求計算房間的面積並輸出 print(‘%s的%s面積為%s‘%(r1.owner,r1.name,r1.width*r1.length)) print(‘%s的%s面積為%s‘%(r2.owner,r2.name,r2.width*r2.length)) #若有100個實例,則此種方法重復率過高,可在類中定義一個函數 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh def cal_area(self): print(‘%s的%s面積為%s‘%(self.owner,self.name,self.width*self.length)) r1=Room(‘房間101‘,‘alex‘,10,10,2) r2=Room(‘房間102‘,‘han‘,5,5,3) r1.cal_area() r2.cal_area() #若需求為調用面積的調用方式與調用變量屬性的方式相同,即使用r1.cal_area的格式調用#類提供了一個靜態屬性裝飾器@property,修飾完函數後,調用方式即為r1.cal_area class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh @property def cal_area(self): return self.width*self.length r1=Room(‘房間101‘,‘alex‘,10,10,2) r2=Room(‘房間102‘,‘han‘,5,5,3) print(r1.cal_area) print(r2.cal_area)
二、類方法@classmethod
@classmethod修飾過的函數,不與任何實例捆綁,只與類捆綁
#當需求為,不進行實例化,直接調用類方法時 class Room: def __init__(self,name): self.name=name def test(self): print(‘--->‘,self.name) Room.test(1) #類調用函數屬性時不會自動加self,所以手動加,但此時並不能找到self.name即1.name #類提供了@classmethod class Room: tag=10 def __init__(self,name): self.name=name @classmethod def test(cls,x): #類cls表明是類方法 print(‘--->‘,cls.tag,x) Room.test(5) #---> 10 5 自動將Room傳給cls
三、靜態方法@staticmethod
@staticmethod修飾過的函數不與類綁定,也不與實例綁定
靜態方法只是名義上歸屬類管理,不能使用類變量和實例變量,是類的工具包
class Room: tag=10 def __init__(self,name): self.name=name @staticmethod def test(a,b,c): print(‘--->‘,a,b,c) Room.test(1,2,3) #---> 1 2 3 p1=Room(‘alex‘) p1.test(1,2,3) #---> 1 2 3
四、小結
靜態屬性@property :將函數封裝成一個數據屬性形式,是外部調用無法知道內部邏輯
既可以訪問類屬性,也可以訪問實例屬性
類方法@classmethod:只能訪問類屬性,不能訪問實例屬性
靜態方法@staticmethod:既不能訪問類屬性,也不能訪問實例屬性
十、靜態屬性、類方法、靜態方法