靜態屬性、類方法、靜態方法
1. 靜態屬性:在函數前加@property,將函數邏輯」封裝「成數據屬性,外部直接調用函數名,如同調用屬性同樣。這個函數是能夠調用類和實例的屬性的,
靜態屬性的做用是把類的方法隱藏起來(能夠把背後的邏輯隱藏起來),讓用戶感受是在調用屬性,而不是方法;html
class Room: res = "alex" 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): print(p1.width * p1.length,Room.res) p1 = Room("四合院","alex",10,10,20) p1.cal_area #print(Room.__dict__)#'cal_area': <property object at 0x00000219606DD4F8>
2. 類方法:在類的方法前添加@classmethod,不須要實例化,直接調用類的該方法,能夠訪問類的數據屬性,可是不能夠訪問對象的數據屬性。
@classmethod類方法是經過類裏面的函數調用類自己的屬性(不跟實例捆綁只和類捆綁,不用實例化)
類方法的定義只是爲了類去調用
python
class Room: res = "alex" def __init__(self,name,owner,width,length,heigh): self.name = name self.owner = owner self.width = width self.length = length self.heigh = heigh @classmethod #類方法只能調用類屬性,不能調用實例屬性 def cal_area(cls): print(Room.res) #調用類的數據屬性 #p1 = Room("四合院","alex",10,10,20) #不須要實例化 Room.cal_area()
3. 靜態方法:在類的方法前加@staticmethod,該方法只是名義上的歸屬類管理,實例和類的屬性均不能夠訪問,僅僅是類的工具包。
能夠理解爲靜態方法只是借用類的大樹下的一個獨立函數函數
class Room: res = "alex" def __init__(self,name,owner,width,length,heigh): self.name = name self.owner = owner self.width = width self.length = length self.heigh = heigh @staticmethod #類屬性和實例屬性都不能夠調用 def cal_area(x,y): print(x,y,) p1 = Room("四合院","alex",10,10,20) #不須要實例化 Room.cal_area(1,2) p1.cal_area(1,2)