1. 程式人生 > >十、靜態屬性、類方法、靜態方法

十、靜態屬性、類方法、靜態方法

一個數 靜態屬性 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:既不能訪問類屬性,也不能訪問實例屬性

十、靜態屬性、類方法、靜態方法