method和function的區別

首先,從概念上去分。函數能夠當作一個數學上的概念,好比說完成加減乘除的函數。它其實有一個內在的約束:就是若是參數相同,對一個函數的每次調用返回的結果應該始終同樣。
而方法是要和對象聯繫起來的。並且它有一個銀行的參數:就是它所做用的對象。而這些更多地是在面向對象的語境裏來講。python

 而從Python的定義來看,它將method做爲function的一種特例來處理了。但當你在文檔裏看到instance method object和function object的說法時,你應該瞭解他們的差別函數

01.>>> class MyClass:  
02.    i = 12345  
03.    def f(self):  
04.        return "hello world"  
05.>>> x = MyClass()  
06.>>> x.f.__class__  
07.<class 'method'>  
08.>>> MyClass.f.__class__  
09.<class 'function'>

從上面的例子能夠看出,一個是method object,一個是function object。 code

此外,Python裏面還有staticmethod和classmethod的概念,他們和普通的method又有些區別。對象

->classmethod將類做爲第一個隱含的參數文檔

->而staticmethod沒有任何隱含的參數,有點相似於Java裏的static數學

01.>>> class MyClass:  
02.    i = 12345 
03.    @staticmethod  
04.    def f(self):  
05.        return "hello world"  
06.    def add(x, y):  
07.        return x+y  
08.    @classmethod  
09.    def foo(cls):  
10.        print(cls)  
11.>>> MyClass.f.__class__  
12.<class 'function'>  
13.>>> MyClass.add.__class__  
14.<class 'function'>  
15.>>> MyClass.foo.__class__  
16.<class 'method'>  
17.>>> x = MyClass()  
18.>>> x.f.__class__  
19.<class 'function'>  
20.>>> x.add.__class__  
21.<class 'method'>  
22.>>> x.foo.__class__  
23.<class 'method'>  
24.>>> x.foo()  
25.<class '__main__.MyClass'>
相關文章
相關標籤/搜索