1. 程式人生 > >Python 靜態方法和類方法

Python 靜態方法和類方法

靜態方法

我們知道在其他語言中靜態方法一般使用static修飾,靜態方法的主要特點是不需要new出物件,直接通過類名就可以訪問,也可以通過物件訪問。需要使用staticmethod裝飾器裝飾方法

舉例:

class A:
    @staticmethod
    def staticfunc():
        print("A")
A.staticfunc() # A

類方法

類方法和靜態方法類似,也可以直接通過類名訪問,不過要使用classmethod裝飾方法,而且引數第一個類本身,為了方便的操作類本身的屬性和方法。

舉例:

class B:
    @classmethod
def classfunc(cls): cls.a = 10 B.classfunc() print(B.a) # 10

對比

靜態方法和類方法都可以通過類名訪問,那直接用靜態方法不就好了?舉個例子看一下

class A:
    @staticmethod
    def staticfunc():
        A.a = 10
A.staticfunc()
print(A.a)#10

class B:
    @classmethod
    def classfunc(cls):
        cls.b = 20;
B.classfunc()
print(B.b)#20

通過上面的例子我們可以看到靜態方法也可以操作類本身,為什麼還要在發明一個類方法?上面例子我們觀察到,靜態方法是通過類名來操作類屬性的寫死在程式中,而類方法是通過引數來操作類屬性的,如果子類繼承了使用靜態方法的類,那麼子類繼承的靜態方法還是在操作父類,子類需要重新靜態方法才能操作子類,類方法如果被繼承,那麼類引數會傳入子類本身。