PYTHON中的類函數、靜态函數、成員函數以及類變量、成員變量
Posted on 2019-03-16 15:10 Mr__Seven 閱讀(14) 評論(0) 編輯 收藏
複制代碼
1 class MethodDemo():
2 classVar = ‘This is a class variable’ #類變量,可在類函數或者成員函數中引用,為所有執行個體共有的
3 def init(self):
4 self.instanceVar = ‘This is a instance variable’ #成員變量,隻可在執行個體對象中引用,隻屬于目前執行個體
5
6 #成員函數
7 def instanceMethod(self,x):
8 temporaryVar = ‘This is a temporary variable’ #臨時變量,隻在目前函數有用,也就是該函數的局部變量
9 print(‘executing instanceMethod(%s,%s)’%(self,x))
10 print(‘classVar = %s’%self.classVar) #類變量可在成員函數中引用
11 print(‘instanceVar = %s’%self.instanceVar) #成員變量可在成員函數中引用
12 print(‘temporaryVar = %s’%temporaryVar) #臨時變量隻能在目前函數中引用
13
14 #類函數
15 @classmethod
16 def classMethod(cls,x):
17 print(‘executing classMethod(%s,%s)’%(cls,x))
18 print(‘classVar = %s’ % cls.classVar) #類方法中能引用類變量
19 # print(‘instanceVar = %s’ % cls.instanceVar) #‘類函數不可引用成員變量 MethodDemo’ has no attribute ‘instanceVar’
20 # print(‘temporaryVar = %s’ % temporaryVar) #類函數不可引用成員函數中的臨時變量 name ‘temporaryVar’ is not defined
21 # print(‘tempVar =%s’ % cls.tempVar) #類函數不可引用成員函數中的局部變量 ‘MethodDemo’ has no attribute ‘tempVar’
22
23 #靜态函數
24 @staticmethod
25 def staticMethod(x):
26 print(‘executing staticMethod(%s)’ % ( x))
27 # print(‘classVar = %s’ % classVar) #靜态函數不可引用類變量
28 # print(‘instanceVar = %s’ % instanceVar) #靜态函數不可引用成員變量
29
30 a = MethodDemo()
31 a.instanceMethod(1) #執行個體對象可引用成員函數
32 a.classMethod(1) #執行個體對象可引用類函數
33 MethodDemo.classMethod(1) #類函數可直接通過類調用
34 a.staticMethod(1) #靜态函數可通過執行個體對象調用
35 MethodDemo.staticMethod(1) #靜态函數可直接通過類調用
36
37 print(a.instanceMethod)
38 print (a.classMethod)
39 print (a.staticMethod)
複制代碼
運作結果:
executing instanceMethod(<main.MethodDemo object at 0x00000000023C0B70>,1)
classVar = This is a class variable
instanceVar = This is a instance variable
temporaryVar = This is a temporary variable
executing classMethod(<class ‘main.MethodDemo’>,1)
classVar = This is a class variable
executing classMethod(<class ‘main.MethodDemo’>,1)
classVar = This is a class variable
executing staticMethod(1)
executing staticMethod(1)
<bound method MethodDemo.instanceMethod of <main.MethodDemo object at 0x00000000023C0B70>>
<bound method MethodDemo.classMethod of <class ‘main.MethodDemo’>>
<function MethodDemo.staticMethod at 0x00000000024DE048>
由此可看出,python中的變量主要包括:類變量、成員變量以及臨時(局部)變量。其中類變量可以在類函數、成員函數中直接使用,可以通過類名或者執行個體對象直接調用。成員變量隻可以在成員函數中使用,并且隻能通過執行個體對象調用。而函數内部定義的臨時變量隻能在目前函數中使用。
至于類函數、靜态函數、成員函數之間的差別如下:
類函數,通過裝飾器@classmethod注解的函數為類函數,有一個隐含參數cls是該類本身。顧名思義,為這個類擁有的函數,可以直接通過類名直接調用,無需執行個體化對象,也可以通過該類的執行個體對象調用。
靜态函數,通過裝飾器@staticmethod注解的函數為靜态函數,可以通過類名直接調用,也可以通過該類的執行個體化對象調用。其實靜态方法隻是在類的作用域裡的函數而已,一般主要處理與這個類的邏輯關聯, 如驗證資料。
成員函數,有一個隐含參數self是目前執行個體本身。隻能被該類的執行個體對象調用。