Python例項方法, 類方法, 靜態方法, 函式 小結
阿新 • • 發佈:2018-11-22
-
不想訪問 類內 和 例項內 的變數,用靜態方法
-
只想訪問類內變數,不想訪問例項變數,用類方法
-
即要訪問內變數,也想訪問例項變數用例項方法
-
函式與靜態方法相同,只是靜態方式的作用域定義在類內
例項方法:
語法:
class 類名(繼承列表):
def 例項方法名(self, 引數1, 引數2, ...):
'文件字串'
語句
作用:
用於描述一個物件的行為,讓此型別的全部物件都擁有相同的行為
說明:
1. 例項方法實質是函式,是定義在類內的函式
2. 例項方法至少有一個形參有,第一個形參代表呼叫這個方法的例項,一般命名為 'self'
示例:
# # 此示例示意例項方法的建立和呼叫 class Dog: '''這是一種小動物的定義 此類動物有吃(eat)的行為: ''' def eat(self, food): '''此方法用來描述小狗吃的行為''' print("小狗正在吃:", food) def sleep(self, hour): print("小狗睡了%d小時" % hour) def play(self, obj): print("小狗正在玩:", obj) dog1 = Dog() # 呼叫建構函式建立一個例項物件 再用dog1變數繫結 dog1.eat('骨頭') dog1.sleep(1) dog1.play('球') dog2 = Dog() # 建立另一個例項物件 dog2.eat('包子') dog2.sleep(3) dog2.play('飛盤')
類方法 @classmethod
類方法是用於描述類的行為的方法,類方法屬於類,不屬於類的例項
說明:
類方法需要使用@classmethod裝飾器定義
類方法至少有一個形參,第一個形參用於繫結類,約定寫為'cls'
類和該類的例項都可以呼叫類方法
類方法不能訪問此類建立的例項的屬性
示例:
# 此示例示意類方法的使用 class A: v = 0 @classmethod def get_v(cls): # cls 用來繫結呼叫此方法的類 return cls.v # 訪問類變數 @classmethod def set_v(cls, value): cls.v = value print(A.get_v()) # 0 A.set_v(100) print(A.get_v()) # 100 a1 = A() # 建立例項 print("a1.get_v() =", a1.get_v()) # 100 a1.set_v(200) print("a1.get_v() =", a1.get_v()) # 200 print('A.get_v() =', A.get_v())
靜態方法 @staticmethod
靜態方法是定義在類內部的函式,此函式的作用域是類的內部
說明:
靜態方法需要使用 @staticmethod裝飾器定義
靜態方法與普通函式定義相同,不需要傳入self例項引數和cls引數
靜態方法只能憑藉該類或類建立的例項呼叫
靜態方法不能訪問類變數和例項變數(屬性)
示例:
#示意靜態方法建立與呼叫 class A: @staticmethod def myadd(a, b): return a + b print(A.myadd(100, 200)) # 300 a = A() # 建立例項 print(a.myadd(300, 400)) # 700