開發必備知識點
阿新 • • 發佈:2018-12-21
函式和方法有什麼區別?
以前學習面向物件的階段,通常把寫在類裡面的叫做方法,寫在類外面的叫做函式。其實不然。
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>> 是方法
所以,我們要以呼叫者來區分是函式還是方法。