類方法首先和類屬性一樣,類方法也可以進行更細緻的劃分,具體可分為類方法、例項方法和靜態方法。
和類屬性的分類不同,對於初學者來說,區分這 3 種類方法是非常簡單的,即採用@classmethod
修飾的方法為類方法;採用@staticmethod
修飾的方法為靜態方法;不用任何修改的方法為例項方法。
靜態方法使用指南
格式:在方法上面新增 @staticmethod
引數:靜態方法可以有引數也可以無引數
應用場景:一般用於和類物件以及例項物件無關的**。
使用方式: 類名.類方法名(或者物件名.類方法名)。
如果我們的類屬性是乙個私有變數,我們就需要定義乙個函式使得在類外可以訪問它。我們希望既可以用類名來訪問,也可以用例項名來訪問,那麼該如何做呢?
class
robot
:# __開頭表示私有變數
__counter =
0def
__init__
(self)
:type
(self)
.__counter +=
1def
show
(self)
:return robot.__counter
if __name__ ==
"__main__"
: x = robot(
)print
("通過例項訪問: "
, x.show())
print
("通過類訪問: "
, robot.show())
# 這樣訪問會報錯
如果我們在定義show這個函式的時候,不寫self引數,那麼可以通過類訪問,不能通過例項訪問,靜態方法就是為了解決這個問題。只需要在定義的函式前新增@staticmethod
,這是裝飾器語法。
來看看下面的**,完美解決上面的問題:
class
robot
:# __開頭表示私有變數
__counter =
0def
__init__
(self)
:type
(self)
.__counter +=
1
@staticmethod
defrobotinstances()
:return robot.__counter
if __name__ ==
"__main__"
: x = robot(
)# 下面可以訪問
print
("通過例項訪問: "
, x.robotinstances())
# 下面可以訪問
print
("通過類訪問: "
, robot.robotinstances(
))
類方法使用指南
無需例項化,可以通過類直接呼叫的方法,但是方法的第乙個引數接收的一定是類本身
在方法上面新增@classmethod
方法的引數為cls也可以是其他名稱,但是一般預設為clscls指向 類物件
應用場景:使用場景:乙個例項的私有屬性通過「__屬性名」來定義,無法被外部所訪問。但是可以從類的內部進行間接訪問,即通過例項方法來訪問。
使用 可以是 物件名.類方法名。或者是 類名.類方法名
使用類方法不需要定義乙個例項,類方法中的cls指向類,不像例項方法中的self指向乙個例項。定義類方法,需要在函式前新增@classmethod
裝飾器。
類方法在繼承當中很有用,在下面的例子中,我們希望在不定義例項的情況下,可以檢視_class_info
資訊,此時靜態方法無法起到作用,因為它沒有傳入任何引數,無法識別是哪乙個類。
class
person
:type
='人類'
@classmethod
deftest
(cls)
:print
(cls.
type
)class
pet:
_class_info =
"pet animals"
@classmethod
defabout
(cls)
:print
("this class is about "
+ cls._class_info +
"!")
class
dog(pet)
: _class_info =
"man's best friends"
class
cat(pet)
: _class_info =
"all kinds of cats"
if __name__ ==
"__main__"
: pet.about(
) dog.about(
) cat.about(
) person.test(
)
必須了解的一些IT知識點
有些知識感覺明白卻說不明白,博主把它定義為似懂非懂 趁著假期,趕緊掃盲!矽 半導體 矽谷 區域網 廣域網 網際網路 域域網 門戶 防火牆 頻寬 摩爾定律 安迪比爾定律 反摩爾定律,風險投資 天使投資 時間戳。矽 是一種化學元素,符號是si,有無定形矽和晶體矽兩種同素異形體,在地殼中,是第二豐富的元素...
關於檔案你必須了解的一些基本概念
檔案是計算機檔案,屬於檔案的一種,與普通檔案的載體不同,計算機檔案是以計算機硬碟為載體儲存在計算機上的資訊集合。在程式設計中,我們一般關注的檔案有兩類,即程式檔案和資料檔案。程式檔案 包括源程式 以.c為字尾 和可執行程式 以.exe為字尾 資料檔案 檔案的內容不一定是程式,而是程式執行時讀寫的資料...
Cardview你必須知道的一些屬性
1.首先使用cardview要依賴design包 2.cardview可包裹控制項,文字 等,作為容器 3.cardview屬性有 card view cardelevation 陰影的大小 card view cardmaxelevation 陰影最大高度 card view cardbackgr...