许多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参数指向了当前对象本身。
-
python
+关注
关注
59文章
4892浏览量
90421
发布评论请先 登录
探索TPA2012D2:高性能立体声滤波免类D音频功率放大器的设计奥秘
【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-红绿灯按钮项目-Python实现简单的Web服务器
曙光存储助力中国移动呼和浩特数据中心建设
红外热成像:让看不见的温度“现形”
电源里的“特种部队”:揭秘115V/400Hz高频电力的神秘面纱与应用领域
光模块拉环颜色背后的神秘意义,你知道多少?
揭开BNC连接器的神秘面纱:技术特性与行业应用盘点
融大视觉:投影融合处理器的应用场景
linux虚拟环境中调用Linux 版matlab编译的python库时出错
突破!华为先进封装技术揭开神秘面纱
浮思特 | 揭开(IGBT)的神秘面纱,结构原理与应用解析
揭开Python类中self的神秘面纱
评论