1. 程式人生 > >開發必備知識點

開發必備知識點

函式和方法有什麼區別?

以前學習面向物件的階段,通常把寫在類裡面的叫做方法,寫在類外面的叫做函式。其實不然。

 1 class Foo(object):
 2     def f1(self):
 3         print('f1')
 4 
 5 
 6 def f2():
 7     print('f2')
 8 
 9 f = Foo()
10 print(type(f2))
11 print(type(Foo.f1))
12 print(type(f.f1))

到這裡,你還能說f2就是函式,f1就是方法嗎???

看輸出結果:

1 <class
'function'> 2 <class 'function'> 3 <class 'method'>

function是函式,method是方法。你的之前的結論是錯的,那我們怎麼來辨別它們兩者呢。從列印結果可以猜想,它們也是一個type造的類,

 所以我們可以這樣玩。

 1 from types import MethodType, FunctionType
 2 
 3 
 4 def check(arg):
 5     if isinstance(arg,MethodType):
 6         print('%s 是方法
'%arg) 7 elif isinstance(arg,FunctionType): 8 print('%s 是函式' % arg) 9 else: 10 print('都不是') 11 check(f2) 12 check(Foo.f1) 13 check(f.f1)

 輸出結果也是一樣的:

1 <function f2 at 0x000001C52F1670D0> 是函式
2 <function Foo.f1 at 0x000001C52F371B70> 是函式
3 <bound method Foo.f1 of <__main__
.Foo object at 0x000001C52F15EB00>> 是方法

所以,我們要以呼叫者來區分是函式還是方法。