分享知識 傳遞快樂
在 Python 中一直以來都以爲函數(function)和方法(method)是一個東西,但後來發現兩者是不一樣的,那麼兩者之間有什麼區別呢?先看段代碼:
代碼1:
def fun():
pass
print(fun)
結果如下:
<function fun at 0x000000000248A820>
代碼2:
class Demo():
def fun1(self):
pass
@classmethod
def fun2(cls):
pass
@staticmethod
def fun3(self):
pass
demo = Demo()
print(demo)
print(demo.fun1)
print(demo.fun2)
print(demo.fun3)
結果如下:
<__main__.Demo object at 0x00000000006BE3D0>
<bound method Demo.fun1 of <__main__.Demo object at 0x00000000006BE3D0>>
<bound method Demo.fun2 of <class '__main__.Demo'>>
<function Demo.fun3 at 0x0000000002631E50>
由此得出:
- 在class內定義的普通方法(fun1),因爲它是要面向實例化對象的一個實例方法。
- 在class內定義的類方法(fun2),它第一個參數必須是cls,並與class本身是綁定關係,它也屬於方法,但不屬於實例方法,可以被實例對象調用。
- 在class內定義的靜態方法(fun3),它與任何對象都沒有聯繫,等同於是在class外定義的function,它屬於函數。
還可以理解爲與類或實例有綁定關係的 function 稱之爲方法(method),否則叫函數。
類(class)與函數(function)的區別:
類(class):類是面向你對象的,class可以保存一此屬性的狀態,同時也起到模板的作用,把一些通用的東西寫進類定義中,也就是在'__init__'中。class有點像是將多個函數進行功能性封裝
函數:函數更像是面向過程編程,更易理解,但是當系統較大時,重複性就會增多。
類(class)與函數(function)的優劣勢:
類(class) | 函數(function) |
---|---|
方便複用 | 不宜複用,容易出錯 |
方便擴展 | 升級、擴展,都十分複雜 |
方便維護 | 不便維護 |
——————————
如有不足請留言指正
相互學習,共同進步