方法是对象:绑定或无绑定
无绑定类方法对象:无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()x = object1.doit #绑定方法对象:instance+functionx("hello
world") #与object1.doit("hello
world")效果相同 |
优点:绑定方法对象可以保留对象的状态信息。如果使用简单函数,状态信息一般使用全局变量来进行保存。
另一方面,如果对类进行点号运算来获取doit,就会得到无绑定方法对象,也就是函数对象的引用值,要调用这类方法时,必须传入实例作为最左参数
|
1
2
3
|
object1 = Spam()t = 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): x = self.m1 #另一个绑定方法对象 x(42) #就像一个简单函数Eggs().m2() #打印出42 |
大多数时候,通过点号运算取出方法后,就是立即调用,所以你不会注意到这个过程中产生的方法对象。如果开始编写以通用方式调用对象的程序代码时,就得小心,特别注意无绑定方法,无绑定方法一般需要传入明确的实例对象。
本文介绍了Python中绑定方法对象和无绑定方法对象的概念及其使用方法。通过实例演示了如何获取和调用绑定方法对象,以及它们如何保留对象的状态信息。
713

被折叠的 条评论
为什么被折叠?



