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))

    '''
        補充: staticmethodclassmethod都可以直接用 類.方法名() 來直接使用,兩個的區別是 :

        @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()
arrow
arrow
    全站熱搜

    Eric 發表在 痞客邦 留言(0) 人氣()