python中方法对象的理解总结?

Python017

python中方法对象的理解总结?,第1张

9.3.4. 方法对象

通常,方法通过右绑定方式调用:

x.f()

在 MyClass 示例中,这会返回字符串 'hello world'。然而,也不是一定要直接调用方法。 x.f 是一个方法对象,它可以存储起来以后调用。例如:

xf = x.f

while True:

print(xf())

会不断的打印 hello world。

调用方法时发生了什么?你可能注意到调用 x.f() 时没有引用前面标出的变量,尽管在 f() 的函数定义中指明了一个参数。这个参数怎么了?事实上如果函数调用中缺少参数,Python 会抛出异常--甚至这个参数实际上没什么用……

实际上,你可能已经猜到了答案:方法的特别之处在于实例对象作为函数的第一个参数传给了函数。在我们的例子中,调用 x.f() 相当于 MyClass.f(x) 。通常,以 n 个参数的列表去调用一个方法就相当于将方法的对象插入到参数列表的最前面后,以这个列表去调用相应的函数。

如果你还是不理解方法的工作原理,了解一下它的实现也许有帮助。引用非数据属性的实例属性时,会搜索它的类。如果这个命名确认为一个有效的函数对象类属性,就会将实例对象和函数对象封装进一个抽象对象:这就是方法对象。以一个参数列表调用方法对象时,它被重新拆封,用实例对象和原始的参数列表构造一个新的参数列表,然后函数对象调用这个新的参数列表。

python使用对象模型来存储数据,也就是说构造任何类型的值都是一个对象。所有的python对象都拥有三个特性:身份id,类型和值。

身份id:唯一的身份标识,可以使用内建函数id()来得到,这个值可以被认为是该对象的内存地址。

类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则,可以用内建函数type()查看

python对象的类型,也可以用isinstance(),在python中类型也是对象。

值:对象表示的数据项。布尔逻辑运算符包括and、or、not,对象值的比较除了一些常见的运算符(<><= >= == !=)之外,还可以

使用cmp()内建函数,如果是用户自定义对象,cmp()对调用该类的特殊方法__cmp__()。对于字符串来说,内建函数str(obj)返回对象适

合可读性好的字符串表示,而另一个内建函数repr(obj)返回一个对象的字符串表示,通常情况下obj == eval(repr(obj))这个等式是成立

的。可以这么说,repr()的输出对python比较友好,str()的输出对人比较友好。方法是在类中定义的函数。

更多技术请关注Python视频教程。