Python函數(function)與方法(method)區別

一直以來都以爲函數和方法是一個東西,平時區分也不是很詳細,後來一搜索發現自己平時叫法是錯的。

先看一段代碼

def fun():
    pass
print fun

結果如下:

<function fun at 0x00000000022BC3C8>

可以看出:
單獨定義的一個function是function,它是一個函數。我個人的理解是,在class外部定義的可執行函數,都是函數。

再看另外一段代碼

#  coding:utf-8


class Apple:

    def fun1(self):
        return 'normal'

    @staticmethod
    def fun2():

        return 'staticmethod'

    @classmethod
    def fun3(cls):

        return 'classmethod'


print Apple.fun1
print Apple.fun2
print Apple.fun3

print "-"*80

apple = Apple()
print apple.fun1
print apple.fun2
print apple.fun3

結果如下:

<unbound method Apple.fun1>
<function fun2 at 0x00000000021DC4A8>
<bound method classobj.fun3 of <class __main__.Apple at 0x0000000001D8C768>>
-------------------------------------------------------------------------------------
<bound method Apple.fun1 of <__main__.Apple instance at 0x00000000021DAE08>>
<function fun2 at 0x00000000021DC4A8>
<bound method classobj.fun3 of <class __main__.Apple at 0x0000000001D8C768>>

可以看出:

  • 在class內定義的普通方法,如fun1,因爲它是要面向將來實例化對象的,其實它就是一個實例方法。它屬於method,是一個方法。
  • 在class內定義的靜態方法,如fun2,它與任何對象都沒有聯繫,等同於是在class外定義的function,它屬於函數。
  • 在class內定義的類方法,如fun3,它第一個參數必須是cls,它與class本身是綁定關係,它屬於方法。

簡單總結:

  1. 與類和實例無綁定關係的function都屬於函數(function);
  2. 與類和實例有綁定關係的function都屬於方法(method)。

謝謝,不對之處還請指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章