1. 程式人生 > >python靜態屬性@property、類方法@classmethod、靜態方法@staticmethod和普通方法

python靜態屬性@property、類方法@classmethod、靜態方法@staticmethod和普通方法

靜態屬性:即將類的函式通過@property屬性封裝,封裝後例項呼叫該函式時,不再需要在函式後面加(),而是用類似呼叫資料屬性的方式直接呼叫函式名稱即可執行函式。

靜態屬性既可以訪問類的屬性,也可以訪問例項的屬性。

類方法:即在類的函式前加@classmethod屬性,函式第一個引數為cls類,表示該函式是類的方法,而不需要繫結具體例項。

在類方法裡面可以呼叫類的屬性,並且在類呼叫該函式時,會將自身作為第一個引數傳入,類方法不能訪問例項。

靜態方法,即在類的函式前加@staticmethod屬性,函式引數既沒有cls類,也沒有self例項,表示該函式是類的工具包,與類本身和例項都沒有繫結關係。

靜態方法由於沒有類和例項引數,所以不能訪問類和例項的屬性。

普通方法:指既沒有上述三種修飾符,也不是常規的函式的方法,可以定義,類可以呼叫但是裡不能呼叫,這種方法其實是沒有意義的,不建議使用。

 

class room:
    tag=1
    def __init__(self, name,length,width,height):
        self.name=name
        self.length=length
        self.width=width
        self.height=height
    @property  
#通過類提供的property對求面積的函式進行封裝 def square(self): s=self.length*self.width print('%s的面積為%s'%(self.name,s)) @classmethod def volumn(cls,length,width,height): #第一個引數為cls,即類 v=length*width*height print('訪問類的屬性%s'%cls.tag) #類方法可以訪問類的屬性 print('類%s的體積為%s'%(cls,v)) @staticmethod
def haha(x,y): #靜態方法既沒有類cls引數,也沒有例項self引數,因此不能訪問類和例項的屬性 print('From staticmethod,%s and %s is haha'%(x,y)) def hahahaha(x,y): #可以這樣定義普通方法,但不建議這樣使用,沒有意義 print('From common method,%s and %s is hahahaha' % (x, y)) room1=room('room1',10,13,3) room1.square #直接呼叫求面積的函式方法就可以執行函式,而不需要加() room.volumn(10,13,3) #類呼叫類方法時,將類自身作為第一個引數傳入 room.haha('Jane','Alan') room.hahahaha('Jane','Alan') # 執行結果: # room1的面積為130 # 訪問類的屬性1 # 類<class '__main__.room'>的體積為390 # From staticmethod,Jane and Alan is haha # From common method,Jane and Alan is haha