DAY 3. 靜態方法,類方法,屬性方法,實例方法
有四種方法,實例方法,類方法,靜態方法,屬性方法
- 實例方法
實例方法的第一個參數是self
,他會指向類的實例化對象,只能被對象調用,如
class Demo:def instanceMethod(self):print("this is a instance method")if __name__ == "__main__":demo = Demo()demo.instanceMethod()
用點調用時不需要傳入對象參數,python會把調用實例方法的對象作為實例方法的第一個參數傳入,等價于
if __name__ == '__main__':demo = Demo()Demo.instanceMethod(demo)
- 類方法
使用裝飾器@classmethod
。第一個參數必須是當前類對象,該參數名一般約定為“cls”,可以使用類(例如C.f())或實例(例如C()。f())調用類方法。 除了類之外,該實例被忽略。 如果為派生類調用類方法,則派生類對象將作為隱含的第一個參數傳遞。
class Demo:@classmethoddef classMethod(self):print("this is a class method")if __name__ == "__main__":demo = Demo()Demo.classMethod()demo.classMethod()
同樣是語法糖,用點調用時會自動把調用類方法的類或對象作為第一個參數傳入
- 靜態方法
用 @staticmethod 裝飾的不帶 self 參數的方法叫做靜態方法,靜態方法不會接收隱式的第一個參數,類似于c++中的靜態方法,只是占用了類的命名空間,與類沒有聯系,了一使用類名或對象名調用
- 屬性方法
用來將一個方法變成靜態屬性,使用修飾器@property
class C:def __init__(self):self._x = None@propertydef x(self):"""I'm the 'x' property."""return self._x@x.setterdef x(self, value):self._x = value@x.deleterdef x(self):del self._x
TODO : 有點難改天專門學
總結
方法 | 修飾器 | 調用 | 使用場景(個人理解) |
---|---|---|---|
實例方法 | / | 只能被對象調用 | 大多數場景 |
類方法 | @classmethod | 能被對象或類調用 | 只操作類屬性 |
靜態方法 | @staticmethod | 能被對象或類調用 | 不操作類中的屬性和方法 |
屬性方法 | @property | 按靜態屬性的方法調用(不加括號) | TODO |
參考文章
GitHub 關于python的面試題
Python靜態方法、類方法、屬性方法
Python面向對象靜態方法,類方法,屬性方法
Python 實例方法、類方法、靜態方法的區別與作用
python 文檔 staticmethod
python 文檔 classmethod