开发必备知识点--函数与方法
函数和方法有什么区别?
以前学习面向对象的阶段,通常把写在类里面的叫做方法,写在类外面的叫做函数。其实不然。
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>> 是方法
所以,我们要以调用者来区分是函数还是方法。