面向對象【四】靜態屬性/靜態方法/類方法

python之靜態屬性、類方法、靜態方法

 

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

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)
複製代碼
相關文章
相關標籤/搜索