揭开Python类中self的神秘面纱

电子说

1.3w人已加入

描述

许多python初学者,在接触到python面向对象的时候,就被类中包含的方法中的self打败了,不知道self是何物?

既然写在方法中,是必须参数,为何在调用方法的时候不给它传参数还能正常运行?和我们前面学的函数传参这块矛盾么?勇哥在这里给慢慢大家揭开self的神秘面纱。

首先我们看下如下代码:

python

改进上述代码,我们来探索下self到底是个什么东西?大家应该记得python中有一个id()内置函数,它可以返回指定变量在内存中存放的地址。

Self既然作为show方法的形参,那我就可以在该方法内部通过print打印,该形参变量在内存中的存放位置;我们在类外创建的对象mytest,它其实也是一个变量,我也可以通过id函数打印给变量在内存中的存放位置,改进后的代码执行结果如下:

python

通过上图,我们发现对象mytest变量的存放地址和self的内存存放地址竟然是一样的,这就意味它们代表的是一个东西,那就是mytest变量本身。当系统在执行mytest=test()的时候,python的解释器会悄悄的帮我们把mytest实例变量传给了self。所以后边我们再调用该方法的时候,不需要再给该方法传参数了。

另外类中的普通方法参数self必须写在最前边(即最左边),self参数本身的名字可以修改,但是不推荐,因为大家都约定叫这个名字了,所以我们就跟着随大流好了。对于接触过其他编程语言的人来说,python中是self与C++和JAVA中类中的this关键字意义是一样的。

因此self在方法中是必须(位置)参数没错,但是在创建对象或实例化的那一刻,python解释器就帮我们传递了当前的对象给self了,所以我们再调用该方法的时候不需要在传了。正是因为方法中有self,我们就可以在方法中对这个实例的属性进行操作了,记住self参数指向了当前对象本身。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分