实例对象唯一可用的操作就是属性引用。有两种有效的属性名:
第一种称作数据属性。相当于C++的数据成员。
不同之处在于Python的数据属性不需要声明,第一次使用时会生出,如同Python的局部变量。
第二种为实例对象所接受的引用属性是方法。方法是属于一个对象的函数。
在Python中,方法不止是类实例所独有:其它类型的对象也可有方法。例如,链表对象有append,insert,remove,sort等等方法
实例对象的有效名称依赖于它的类。按照定义,类中所有(用户定义)的函数对象对应它的实例中的方法。所以在我们的例子中,x..f是一个有效的方法引用,因为MyClass.f是一个函数。但x.i不是,因为MyClass.i是不是函数。不过x.f和MyClass.f不同--它是一个 方法对象,不是一个函数对象。
为什么要叫方法对象?
这种方法不是一定要直接调用,他可以存储起来以后调用:
xf = x.f while True: print xf()方法的特别之处在于实例对象作为函数的第一个参数传给了函数。在我们的例子中,调用
x.f()
相当于MyClass.f(x)
。
如果你还是不理解方法的工作原理,了解一下它的实现也许有帮助。引用非数据属性的实例属性时,会搜索它的类。如果这个命名确认为一个有效的函数对象类属性,就会将实例对象和函数对象封装进一个抽象对象:这就是方法对象。以一个参数列表调用方法对象时,它被重新拆封,用实例对象和原始的参数列表构造一个新的参数列表,然后函数对象调用这个新的参数列表。