电子说
许多python初学者,在接触到python面向对象的时候,就被类中包含的方法中的self打败了,不知道self是何物?
既然写在方法中,是必须参数,为何在调用方法的时候不给它传参数还能正常运行?和我们前面学的函数传参这块矛盾么?勇哥在这里给慢慢大家揭开self的神秘面纱。
首先我们看下如下代码:
改进上述代码,我们来探索下self到底是个什么东西?大家应该记得python中有一个id()内置函数,它可以返回指定变量在内存中存放的地址。
Self既然作为show方法的形参,那我就可以在该方法内部通过print打印,该形参变量在内存中的存放位置;我们在类外创建的对象mytest,它其实也是一个变量,我也可以通过id函数打印给变量在内存中的存放位置,改进后的代码执行结果如下:
通过上图,我们发现对象mytest变量的存放地址和self的内存存放地址竟然是一样的,这就意味它们代表的是一个东西,那就是mytest变量本身。当系统在执行mytest=test()的时候,python的解释器会悄悄的帮我们把mytest实例变量传给了self。所以后边我们再调用该方法的时候,不需要再给该方法传参数了。
另外类中的普通方法参数self必须写在最前边(即最左边),self参数本身的名字可以修改,但是不推荐,因为大家都约定叫这个名字了,所以我们就跟着随大流好了。对于接触过其他编程语言的人来说,python中是self与C++和JAVA中类中的this关键字意义是一样的。
因此self在方法中是必须(位置)参数没错,但是在创建对象或实例化的那一刻,python解释器就帮我们传递了当前的对象给self了,所以我们再调用该方法的时候不需要在传了。正是因为方法中有self,我们就可以在方法中对这个实例的属性进行操作了,记住self参数指向了当前对象本身。
全部0条评论
快来发表一下你的评论吧 !