python中的self的理解

在python我们学到类的时候会发现一个神奇的事,原来书写一个没有参数的函数如下:

def eat():
    print("小猫爱吃鱼")
eat()

结果:
python中的self的理解_第1张图片
从上面基本的函数中我们发现不刻意用参数的时候函数名后面的括号中什么都没有,我们调用函数的时候也没有传参数给这个函数,函数 一向是不调用不执行这么一来 我带大家看一下函数在类中的方法书写:

class Cat:
    def eat(self):
        print("小猫爱吃鱼")
    def drink(self):
        print("小猫要喝水")
#创建cat对象
tom=Cat()
tom.eat()
tom.drink()

结果:
在这里插入图片描述
在类中写一个方法的时候会自动带一个self参数,在实例化对象后调用这个方法的时候虽然未给方法传该参数但是方法却执行了,那这个self参数到底是干啥的呢?我们进一步来看代码:

class Cat:
    def eat(self):
        #哪一个对象调用的方法,self就是那一个对象的引用方法
        print("%s爱吃鱼"%self.name)
    def drink(self):
        print("%s要喝水"%self.name)
#创建cat对象
tom=Cat()
#给对象增加属性
tom.name="Tom"
tom.eat()
tom.drink()

结果:
python中的self的理解_第2张图片
看到上面的代码感觉更神奇了,我们在Cat这个类中并未定义name这个属性,只在实例化对象后给对象增加了这个属性,这时并未为给方法传指定的值方法却用了我们书写的属性,这一切是咋回事呢,其实这一切都是self起的作用,当一个对象调用这个方法,self就是那一个对象的引用方法,具体说如下图 :
python中的self的理解_第3张图片
由于python是执行时用解释器一句一句解释,当遇到类不会立即执行,它会继续向下,当执行到创建对象的时候,会创建一个Cat对象存在内存地址中由tom这个变量引用,这时继续执行给tom这个对象增加了一个name属性保存了Tom这个字符串,继续向下执行调用eat()方法,这时eat()方法中的self就是tom这个对象的引用,然后用self访问tom中的Tom属性用self.name就可以访问到。
总结:self就是当那个对象调用的方法,self就是那一个对象的引用方法

你可能感兴趣的:(python中的self的理解)