关闭

python绑定方法

标签: 绑定方法
194人阅读 评论(0) 收藏 举报

首先要明确的一点是:绑定方法和非绑定方法在创建时没有任何区别,同一个方法,既可以为绑定方法,也可以为非绑定方法,一切不同都只在调用时的手法上有所区别。
绑定方法即该方法绑定类的一个实例上,必须将 self 作为第一个参数传入,而这个过程是由 python 自动完成的。所以可以通过实例名.方法名(参数列表)来进行调用。
而非绑定方法因为不绑定到实例上,所以在引用时是通过类来进行引用。自然的,该过程不是 Python 自动完成,如果忘记传入实例,那么直接调用是肯定会出问题的。所以要调用类的非绑定方法时应该显示地提供一个实例作为第一个参数。使用类名.非绑定方法名(参数列表)的形式来进行引用。
具体来说,除开静态类,其他类的绑定方法定义时都需要制定 self 作为第一个参数,而调用时自动由 Python 将方法绑定到实例上。
Talk is week, let me show you my code:

class Test:
… def func(self, message):
… print message

object1=Test()
x=object1.func
x(‘abc’)
abc
t=Test.func
t(object1,’abc’)
abc
上面的示例代码摘自网络。从示例中我们可以看出,x=object1.func 其实是将 object1 实例的func 方法地址与变量名 x 构成了映射关系,在调用 x(‘abc’) 时,其实就是在调用object1.func(‘abc’),这个时候原本的类方法 func(self, message) 的参数列表中,self 已经由 Python 自动关联到了object1 这个实例上,所以,我们在调用时只需要单纯传入 message 就可以了。
但是对于 t=Test.func 来说,变量名 t 是关联到了类 Test 的func 方法的地址上,所以在调用t(object1, ‘abc’) 时,必须显式的将实例名与 self 关联,否则将会报出”TypeError: unbound method func() must be called with Test instance as first argument (got str instance instead)” 的错误。

0
0
查看评论

python绑定方法和无绑定方法

方法是对象:绑定或无绑定     无绑定类方法对象:无self     绑定实例方法对象:self+函数对 1 2 3 class Spam:    ...
  • u012156686
  • u012156686
  • 2016-10-13 00:00
  • 819

Python函数的绑定调用和非绑定调用

class Test:     def func(self,message):         print message   object1=Test() x=object1.f...
  • tycoon1988
  • tycoon1988
  • 2014-08-06 10:08
  • 1083

Python学习:给类的实例绑定属性和方法

用C#的朋友都知道,我们创建了某个类的实例之后想给该实例其中一个属性赋值的话,这个属性必须在类中提前声明好,比如: public Class House { public int Width{get;set;} } House h = new House(); h.Width=50; 而在...
  • u011014032
  • u011014032
  • 2015-05-09 22:16
  • 991

有关python给类绑定方法

 像函数一样,Python中的类方法也是一种对象。由于既可以通过实例也可以通过类来访问方法,所以在Python里有两种风格: 未绑定的类方法:没有self     通过类来引用方法返回一个未绑定方法对象。要调用它,你必须显示地提供一个实例作为第一个参数...
  • yyyzzzwww007
  • yyyzzzwww007
  • 2014-11-14 09:25
  • 576

【搬家】【Python】Python 中类的绑定方法与非绑定方法释疑

a
  • tiwoo
  • tiwoo
  • 2014-06-18 16:02
  • 1283

python继承,调用未绑定的父类方法,super,多级继承

【1701H1】【穆晨】【180109】第九十一天总结 python的继承格式:class 子类名(父类名): 子类如果重写构造函数,定义了子类对象调用父类函数时会报错,上图是在子类没重新定义构造函数的 若要在子类调用父类的方法,可以使用:调用未绑定的父类方法 或者使...
  • qin_shang_
  • qin_shang_
  • 2018-01-09 15:30
  • 49

python 使用MethodType绑定方法到类

问题引出 先看下面一段代码: from types import MethodType def set_age(self,age): self.age=age class Stu(object): pass Stu.set_age=MethodType(set_age,Stu) A=...
  • qq_28163175
  • qq_28163175
  • 2016-09-30 10:21
  • 4465

关于python方法绑定

本篇主要总结Python中绑定方法对象(Bound method object)和未绑定方法对象(Unboud method object)的区别和联系。主要目的是分清楚这两个极容易混淆的概念,顺便将Python的静态方法,类方法及实例方法加以说明 OK,下面开始 1. 一个方法引发的“...
  • qq_37668530
  • qq_37668530
  • 2017-06-11 10:09
  • 115

Python的动态绑定与赋值机制

<br />转帖:文章出处:http://hi.baidu.com/buptyoyo/blog/item/224e5fa6eab1a4e69052eecf.html<br /> <br /> <br /> 与C、C++等静...
  • carolzhang8406
  • carolzhang8406
  • 2011-04-27 21:18
  • 3039

Java的方法绑定

1.程序绑定: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定 2.静态绑定(前期绑定/编译期绑定): 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。 针对java简单的可以理解为程序编译期的...
  • berber78
  • berber78
  • 2014-12-15 19:32
  • 3410
    个人资料
    • 访问:9631次
    • 积分:359
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:5篇
    • 译文:14篇
    • 评论:3条