绑定

方法在所属的类定义了实例时,方法才绑定了那个实例,没有实例的时候,方法就是未绑定状态,而定义方法的时候,第一个参数都是self,代表的是调用此方法的实例

在实例调用方法的时候,由于实例都是作为第一个参数传递到方法调用中的,也就是self变量引用了方法所绑定的实例,所以在方法定义上第一个参数必须是self

在方法中可以没有用到self,比如仅仅打印一个hello world,这时候就没有使用到调用该方法的实例,也就是没有与类进行关联,那可以定义一个普通的函数即可

对于调用绑定的方法,也就是已经创建了一个实例来调用此方法,只需要myclass.foo()即可;而在实例调用绑定的方法的时候,self不需要明确传入,会自己作为第一个参数传入

__author__ = 'LiHui'

class MyClass(object):
    def __init__(self):
        self.a = 1
    def foo(self):
        print self.a

if __name__ == '__main__':
    myclass = MyClass()
    myclass.foo()

假如是非绑定的方法,也就是没有一个明确的实例来调用,比如下面例子

__author__ = 'LiHui'

class MyClass(object):
    def __init__(self):
        self.a = 1
    def foo(self):
        print self.a

class MyChildClass(MyClass):
    def __init__(self):
        self.a = 2
        MyClass.__init__(self)

if __name__ == '__main__':
    myclass = MyChildClass()
    myclass.foo()

派生出来的MyChildClass,构造器将基类MyClass里的__init__给覆盖了,这样self.a的值就变为了2,而想要重新调用基类构造器,把self.a指向对象1,此时就是调用了非绑定方法,子类调用基类的构造器,但是基类是没有实例的,所以传递了基类构造器所需要的self参数,通过基类类名来调用,关键就是记得要传入self参数

发表回复