python 物件導向 09類方法 靜態方法

2021-10-05 20:53:12 字數 3559 閱讀 5594

類方法是從屬於"類物件"的方法。類物件可以通過裝飾器@classmethod來定義,具體格式如下:

@classmethod

def 類方法名(cls [

, 形參列表]):

方法體

要點如下:

@classmethod必須位於方法的上面一行

第乙個引數cls(class的縮寫,和前面筆記介紹的self類似),必須要有,代指"類物件"本身。

呼叫類方法格式:類名.類方法名(引數列表)。引數列表中不需要也不能給cls引數進行傳值,直譯器會自動賦值。

類方法中可以訪問例項屬性和例項方法會導致錯誤,因為有類不一定有物件

子類繼承父類方法時,傳入cls是自身物件,而非父類物件。(後面的筆記會有介紹)

**示例:

class

student

: count =

0# 類屬性

"""定義方法"""

@classmethod

defprint_count

(cls)

:"""cls引數代表類物件"""

print

(student.count)

"""呼叫類方法"""

print

("呼叫時,不傳遞cls引數"

)student.print_count(

)

執行結果:

呼叫時,不傳遞cls引數

0

在python中,允許定義於」類物件「無關的方法,稱為"靜態方法"。

「靜態方法"和在模組中定義的普通方法沒有什麼區別,只不過"靜態方法"放到了"類的名字變數空間」,需要通過類呼叫。

靜態方法通過裝飾器@staticmethod來定義,格式如下:

@staticmethod

def 靜態方法名(

[形參列表]):

方法體

要點如下:

@staticmethod必須位於方法上面一行

呼叫靜態方法格式:類名.靜態方法名(引數列表)靜態方法中訪問例項屬性和例項方法會導致錯誤

**示例:

class

student

: count =

0# 類屬性

@staticmethod

defadd

(a, b)

:"""與類無關的靜態方法"""

"""因為靜態方法從屬於類,所以是可以操作類屬性和類方法"""

print

("+="

.format

(a, b, a+b)

)return a + b

# 呼叫靜態方法

student.add(20,

30)

執行結果:

20+30

=50res=

50

class

myclass

:# 類屬性

class_attr =

0def

__init__

(self, obj_attr)

: self.obj_attr = obj_attr

definstance_method

(self)

:return

"instance method called"

, self

@classmethod

defclass_method

(cls)

:return

"class method called"

, cls

@staticmethod

defstatic_method()

:return

"static method called"

print

("呼叫例項方法"

)obj1 = myclass(

"obj_attr1"

)print

(obj1.instance_method())

print

("--"*20

)print

("呼叫類方法"

)print

(myclass.class_method())

print

("--"*20

)print

("呼叫靜態方法"

)print

(myclass.static_method(

))

執行結果:

呼叫例項方法

('instance method called'

,<__main__.myclass object at 0x10ca93310

>)-

----

----

----

----

----

----

----

----

----

---呼叫類方法

('class method called'

,<

class

'__main__.myclass'

>)-

----

----

----

----

----

----

----

----

----

---呼叫靜態方法

static method called

注意: 以下討論的屬性、方法均指公開的型別,非私有的。

例項方法:

能讀取、修改例項屬性

能呼叫例項方法

能讀取、修改類屬性

能呼叫類方法

能呼叫類靜態方法

呼叫方式:物件名.例項方法名(引數列表),編譯器自動傳遞self引數

類方法:

不能讀取、修改例項屬性

不能用例項方法

能讀取、修改類屬性

能呼叫類方法

能呼叫類靜態方法

呼叫方式:類名.類方法名(引數列表),編譯器自動傳遞cls引數

靜態方法:

不能讀取、修改例項屬性

不能用例項方法

能讀取、修改類屬性

能呼叫類方法

能呼叫類靜態方法

呼叫方式:類名.靜態方法名(引數列表),不需要cls引數

總結:類方法和靜態方法,功能非常相近,可以相互替代, 但是從規範的角度來說,請按照例項方法操作物件,類方法操作類,靜態方法為和類無關的通用方法。

Python基礎 09 物件導向

1.基本格式和使用 類 class 類名 塊物件 物件名 類名 2.組成 2.屬性 特徵 例項屬性 修改 類外面 例項物件.屬性名 值 類裡面 self.屬性名 值 獲取 類外面 物件名.屬性名 類裡面 self.屬性名 類屬性 歸屬於類物件的屬性,所有物件共有的屬性 類屬性只能通過類物件修改,不能...

Python 基礎 09 物件導向2

繼承 子類繼承父類,子類一旦繼承父類,就擁有父類中非私有的屬性和方法 繼承的格式 class 子類名 父類名 子類中的 繼承的優點 1.避免了 的重複,提高了 的重複使用率 2.擴充套件了子類的功能 class obj 1 def init self,func1,func2 self.func1 f...

036 物件導向 09

一 概念部分 靜態變數 在類中,用static宣告的成員變數為靜態變數 也叫類變數 類屬性 二 靜態變數的特點 1.它為該類的公用變數,屬於類,被該類的所有例項共享,在類被載入時被顯式初始化 2.對於該類的所有物件來說,static成員變數只有乙份。被該類的所有物件共享 3.可以使用 物件.類屬性 ...