close
import os import sys import copy from functools import reduce ''' #淺談方法與屬性的類型 簡單來說,在設計python物件導向程式的時候,可以把類別分為兩個種類 1. 實例方法 (屬性) 2. 類別方法 (屬性) 1. 實例的方法與屬性的特色,就是有self,屬性開頭是self,同時所有方法的第一個參數 是self,這些是建立class object的時候,屬於屬性的一部分。 2. 類別的方法前面則是@classmethod,不一樣的是,她第一個參數習慣是用cls,而類別 方法與屬性不需要實例化,並且,類別的屬性會隨時被更新。 ''' class ABCD(): counter = 0 def __init__(self): #類別屬性,可由類別本身調用 ABCD.counter +=1 #更新 @classmethod #類別方法,可由類別本身調用 def class_show_counter(cls): print("class method : counter = %d , counter =%d "% (cls.counter,ABCD.counter)) ''' 補充: staticmethod和classmethod都可以直接用 類.方法名() 來直接使用,兩個的區別是 : @staticmethod : 不需要表示自身對象的self和自身類的cls參數,就跟使用函數一樣 @classmethod : 也不需要self參數,但第一個參數需要是表示自身類的cls參數 ''' @staticmethod def static_show_counter(): print("static method invoke!") #print(counter) #Unresolved reference 'counter' print(ABCD.counter) #success : print :3 def main(): item = ABCD() item.class_show_counter() # class method : counter = 1 , counter =1 item2 = ABCD() item2.class_show_counter() # class method : counter = 2 , counter =2 item3 = ABCD() item3.class_show_counter() # class method : counter = 3 , counter =3 ABCD.static_show_counter() ABCD.class_show_counter() if (__name__=='__main__'): main()
全站熱搜