python绑定方法和无绑定方法

方法是对象:绑定或无绑定

    无绑定类方法对象:无self

    绑定实例方法对象:self+函数对

1
2
3
class  Spam:
     def  doit( self , message):
         print (message)

现在,在=正常操作中,创建了一个实例,在单步调用了他的方法,从而打印出传入的参数message:

1
2
object1  =  Spam()
object1.doit( "hello world" )

不过,其实,绑定方法对象实在过程中产生的,就是在方法调用的括号前。事实上,我们可以获取绑定方法,而不用实际进行地啊用。oject.name点号结合运算是一个对象表达式。在下列的代码中,会传回绑定方法对象,把实例(object1)和方法函数(Spam.doit)打包起来。我们可以把这个绑定方法赋值给另一个变量,然后像简单函数那样进行调用。

1
2
3
object1  =  Spam()
=  object1.doit     #绑定方法对象:instance+function
x( "hello world" )     #与object1.doit("hello world")效果相同

优点:绑定方法对象可以保留对象的状态信息。如果使用简单函数,状态信息一般使用全局变量来进行保存。

另一方面,如果对类进行点号运算来获取doit,就会得到无绑定方法对象,也就是函数对象的引用值,要调用这类方法时,必须传入实例作为最左参数

1
2
3
object1  =  Spam()
=  Spam.doit                 #未绑定方法对象,在python3.0是一个函数
t(object1,  "hello world" )     #传入一个实例

扩展一下,如果我们引用的self的属性是引用类中的函数,那么相同的规则也适用于类的方法。serlf.method表达式是绑定方法对象,因为self是实例对象。

1
2
3
4
5
6
7
8
class  Eggs:
     def  m1( self , n):
         print (n)
     def  m2( self ):
         =  self .m1      #另一个绑定方法对象
         x( 42 )            #就像一个简单函数
 
Eggs().m2()              #打印出42

大多数时候,通过点号运算取出方法后,就是立即调用,所以你不会注意到这个过程中产生的方法对象。如果开始编写以通用方式调用对象的程序代码时,就得小心,特别注意无绑定方法,无绑定方法一般需要传入明确的实例对象。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值