1. 程式人生 > >類方法和靜態方法(python3.6)

類方法和靜態方法(python3.6)

靜態方法和類方法都可以通過類和物件呼叫

class statics_test():
    def __init__(self):
        self.class_variable=7#物件變數
        
    class_variable=6#類變數和物件變數同名
    
    @staticmethod
    def static_func(a,b):
        print(a+b)
        print(statics_test.class_variable)#靜態方法可以根據類名訪問類變數
    
    @classmethod
    def class_func(cls,a,b):
        print(a+b)
        print(cls.class_variable)#類方法可以用cls訪問類變數
    
    def tes(self):
        print('normal func')
        print(self.class_variable)#普通法可以用self訪問類變數,如果有同名的物件變數,只能取到物件變數
        
class child_class(statics_test):
    def tes(self):
        print('normal function')
    
if __name__=='__main__':
    statics_test.static_func(1,2) #通過類呼叫靜態方法
    statics_test.class_func(1,2)  #通過類呼叫類方法
    ob = statics_test()
    ob.class_func(1,2)#通過物件呼叫類方法
    ob.static_func(1,2)#通過物件呼叫靜態方法
    ob.tes()
    
    child_class.class_func(1,2)#類方法可以繼承
    child_class.static_func(1,2)#靜態方法可以繼承
    print(child_class.class_variable)#類變數可以繼承
    ob2 = child_class()
    print(ob2.class_variable)#物件變數可以繼承
    

沒搞清楚,類函式和靜態函式到底有什麼不同,我沒發現他們倆有彼此不能做的事情,有高人指點嗎?