开发必备知识点--函数与方法

函数和方法有什么区别?

以前学习面向对象的阶段,通常把写在类里面的叫做方法,写在类外面的叫做函数。其实不然。

 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>> 是方法

所以,我们要以调用者来区分是函数还是方法。

 

posted @ 2018-11-13 22:27  爬呀爬Xjm  阅读(194)  评论(0编辑  收藏  举报