大家学Python面向对象的时候,总会遇到一个让人难以理解的存在:self

这个self到底是谁啊,为什么每个类实例方法都有一个参数self,它到底有什么作用呢?

「先下结论:类实例化后,self即代表着实例(对象)本身」

想要理解self有个最简单的方法,就是你把self当做「实例(对象)的身份证。」

Python的类不能直接使用,只有通过创建实例(对象)才能发挥它的功能,每个实例(对象)都是独一无二的,它可以调用类的方法、属性。类就像灵魂附体一样,让实例(对象)有了自己(self)的功能。

初学者会发现,类的方法(构造方法和实例方法)中都会有一个固定参数self,其实这个参数就是代表着实例(对象)本身,就像是一个身份证,实例可以凭着身份证去调用类方法。

类比人类,人类就是一个Python类,每个个体的人代表着实例(对象),而每个人的身份证代表的Python中self,每个人可以凭借身份证去上大学、坐高铁、住酒店...(方法),而Python中的实例(对象)也可以凭着self去调用类的方法。

上面是用类比的方法解释了下self的含义,说到底self就是代表着实例本身,「当某个实例(对象)调用类方法时,该对象会把自身的引用作为第一个参数自动传给该方法,而这第一个参数就是self。」

而且self只是约定俗成的写法,你可以用任何其他名称代替self,不会改变代码含义,只不过我们一般不这样做。另外,搜索公众号顶级架构师后台回复“面试”,获取一份惊喜礼包。

为了更好的说明self的作用,我们来举个例子,下面有一个Students类:

class Students:# 构造方法def __init__(self,name):self.name = name# 实例方法def study(self,examination_results):self.examination_results = examination_resultsprint("同学{}的考试分数是{}".format(self.name,self.examination_results))print("该实例对象的地址是{}".format(self))

先来个实例student_a

studend_a = Students('studend_a')
print(studend_a.name)

结果打印出:studend_a

再来个实例student_b

studend_b = Students('studend_b')
print(studend_b.name)

结果打印出:studend_b

可以看出,实例(对象)不一样,打印出的结果也不一样,当类被实例化后,self.name其实就等于实例(对象).name

还是以刚刚的代码为例,我们再来调用里面的实例方法,里面会打印出self,就能看得更加明显了

实例student_a:

studend_a = Students('studend_a')
print(studend_a.study(80))

输出结果:

同学studend_a的考试分数是80 该实例对象的地址是<「main」.Students object at 0x00000129EB0F6A90>

实例student_b:

studend_b = Students('studend_b')
print(studend_b.study(80))

输出结果:

同学studend_b的考试分数是80 该实例对象的地址是<「main」.Students object at 0x00000129EB0F6B38>

大家能清楚看到两个实例打印出的self是不一样的,因为self代表着实例(对象)本身。

以实例student_b来说,打印self出现下面对象信息

<__main__.Students object at 0x00000129EB0F6B38>

如果再打印 student_b,会出现同样的结果

print(student_b)

输出:

<__main__.Students object at 0x00000129EB0F6B00>

这个时候是不是就清楚了,类实例化后,self即代表着实例(对象)本身

免责声明:本文内容来源于网络,文章版权归原作者所有,意在传播相关技术知识&行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。

python项目中的self到底是什么?相关推荐

  1. python项目中requirements的巧用(一键导入所有安装包)

    一个Python 项目中可能安装很多安装包, 再次创建虚拟环境是需要重新安装的话很麻烦也费时间, 或者项目部署的时候避免重装, 可以将现有项目的所有安装包记录在requirements.txt 文件, ...

  2. python神奇时钟项目_怎么在Python项目中利用Pygame绘制一个时钟

    怎么在Python项目中利用Pygame绘制一个时钟 发布时间:2020-11-30 14:24:30 来源:亿速云 阅读:54 作者:Leah 怎么在Python项目中利用Pygame绘制一个时钟? ...

  3. python中pass的使用_pass语句如何在Python项目中使用

    pass语句如何在Python项目中使用 发布时间:2020-11-16 14:55:02 来源:亿速云 阅读:98 本篇文章为大家展示了pass语句如何在Python项目中使用,内容简明扼要并且容易 ...

  4. java项目中的classpath到底是什么

    java项目中的classpath到底是什么 在java项目中,你一定碰到过classpath,通常情况下,我们是用它来指定配置/资源文件的路径.在刚开始学习的时候,自己也糊里糊涂,但是现在,是时候弄 ...

  5. 前端项目中package.json到底是什么,又充当着什么作用呢?一文来带你了解package.json!

    大家好,我是纸飞机,想必大家都在项目中经常看见package.json.package-lock.json.node_modules这三剑客,那么他们到底是什么呢?又有什么作用呢?今天就来带你们理一遍 ...

  6. Python项目中用富文本编辑器展示精美网页

    富文本编辑器实现效果图: 左侧编辑区域,右侧渲染到HTML显示效果,除了渲染时候代码样式有所不同,其他标题.文字.图片基本满足所见即所得的效果 下面讲解富文本编辑器在Django项目中如何使用 1.前 ...

  7. python项目中的Docker的简单使用

    文章目录 1. Docker简介 2. 虚拟化部署环境的重要性 3. Vmware和Docker区别 4. CentOS下安装Docker 4.1 关闭selinux服务 4.2 安装Docker服务 ...

  8. python 项目中的requirements.txt文件

    在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号.这个文件有点类似与Rails的Gemfile.其作用是用来在另一台PC ...

  9. Python 项目中requirements.txt依赖文件的使用

    在学习他人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号.其好处就是在新设备上重新构建项目时,快速的添加运行程序所需要的依赖. ...

最新文章

  1. python创建对象的格式为_Python入门基础学习(面向对象)
  2. VC++关于UNICODE版本的开发
  3. java远程桌面图片压缩问题_java用Socket实现的远程桌面浏览 内存溢出问题
  4. python序列化和反序列化_python反序列化免杀
  5. C++longest increasing subsequence 最长递增子序列的实现之一(附完整源码)
  6. 华为鸿蒙全能家居,能兑现多少?华为智慧屏十年不过时,用鸿蒙理念做智能家居...
  7. 论文浅尝 | WWW2022 - “知识提示”之知识约束预训练微调
  8. blui_BLUI:一种创建游戏UI的简单方法
  9. 指定跳转_炸裂!PPT能一键统一色彩,还能一键跳转到指定颜色
  10. 测试面试题集-Dubbo常见面试题
  11. 华尔街英语学习软件_华尔街英语吧啦吧啦聊点啥:语言学习交流至上
  12. python函数的参数细节
  13. karto探秘之open_karto 第一章 --- 数据结构与类的初始化
  14. 阿里云播放器SDK 不断读取播放事件【内部用】
  15. oracle 无效的窗口句柄 print spooler服务已开,大师为你解决win10系统无法运行print spooler服务的恢复技巧...
  16. 5个相见恨晚的设计资源网站,记得收藏。
  17. 百度翻译 的html,百度翻译 Baidu Translate
  18. 37岁,感觉上班太累,可做这5个生意,年轻人看不上,但却挺赚钱
  19. 车载电子 || 电池FPC连接片虚焊失效分析
  20. 【CSS】955- 你该知道的字体 font-family

热门文章

  1. 塞雷三分钟漫画中国史2
  2. Java实现蓝桥杯勇者斗恶龙
  3. Excel数据透视表系列培训--课时2
  4. handle与HWND的差别
  5. 【001】Visual Studio
  6. c语言指针一览第一部分(新手向)
  7. 苹果保修期多久_手机的寿命究竟有多久,您的换机周期是否会等到手机报废呢?|手机|电池|安卓手机...
  8. Android SDK Windows 安装及环境配置教程
  9. ARM之S5pv210的按键和中断部分
  10. 服务器管理口安装系统,管理口安装服务器操作系统