Python 靜態方法和類方法
阿新 • • 發佈:2019-02-07
靜態方法
我們知道在其他語言中靜態方法一般使用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
通過上面的例子我們可以看到靜態方法也可以操作類本身,為什麼還要在發明一個類方法?上面例子我們觀察到,靜態方法是通過類名來操作類屬性的寫死在程式中,而類方法是通過引數來操作類屬性的,如果子類繼承了使用靜態方法的類,那麼子類繼承的靜態方法還是在操作父類,子類需要重新靜態方法才能操作子類,類方法如果被繼承,那麼類引數會傳入子類本身。