@property,@staticmethod,@classmethod簡要

@property主要就是爲了把類裏面的函數直接對外以變量的形式表述,函數參數的給予也直接變成以賦值的形式。他還會自動產生@<函數名>setter,這個裝飾器,正是這個裝飾器可以使他對外索取參數時可以以賦值的形式。還會有個@<函數名>deleter  可以直接用del的變量名的方式刪除變量。這不多說了 太多博客可以很簡單的說明白這事。

@staticmethod 只要加在一個類裏的函數前面你就會發現原本變成關鍵字的self,變成了和其他變量名一樣,失去了關鍵字顏色。沒錯,加了這個以後,函數就失去了自己對類本身的綁定。他將不再以任何形式綁定在該類裏。也就是說,他就像是一個租房的,人住在這家人裏邊,但實際上和這家人已經失去了聯繫。你只是需要找他的時候要敲這家人的門。也就是在調用的時候,直接使用類名去調用,而不是實例化後調用對象裏的他。當然你強行這麼做也可以,但會失去自動傳值,浪費效率。


@classmethod 是對上述@staticmethod的加強。完全不能使用類中本身的參數實在是太可怕了。於是乎就加了這麼個玩意,讓他可以使用類中的全局變量。注意是全局變量不是self.xxx,你只能使用cls.xxx去訪問類的“全局變量”,不能訪問任何類本身綁定的變量。事實上這也非常可怕。



總結:這幾個方法  卵用都沒有  如果一定要說對外的隱蔽性  @property一定程度上可以增加類的私有成員的隱蔽性,但是其他兩個方法不能訪問類的變量讓他不適應絕大多數需要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章