浅谈Python类中的self到底是干啥的


Posted in Python onNovember 11, 2019

Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了。

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。

下例中将self改为myname一样没有错误:

class Person:
  def _init_(myname,name):
    myname.name=name
  def sayhello(myname):
    print 'My name is:',myname.name
p=Person('Bill')
print p

self指的是类实例对象本身(注意:不是类本身)。

class Person:
  def _init_(self,name):
    self.name=name
  def sayhello(self):
    print 'My name is:',self.name
p=Person('Bill')
print p

在上述例子中,self指向Person的实例p。 为什么不是指向类本身呢,如下例子:

class Person:
  def _init_(self,name):
    self.name=name
  def sayhello(self):
    print 'My name is:',self.name
p1=Person('Bill')
p2 = Person('Apple')
print p1

如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?

总结

self在定义时需要定义,但是在调用时会自动传入。

self的名字并不是规定死的,但是最好还是按照约定是用self

self总是指调用时的类的实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
解决python3 安装不了PIL的问题
Aug 16 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
Python中Subprocess的不同函数解析
Dec 10 Python
python numpy库np.percentile用法说明
Jun 08 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 Python
python 调试冷知识(小结)
Nov 11 #Python
通过 Django Pagination 实现简单分页功能
Nov 11 #Python
python机器学习实现决策树
Nov 11 #Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 #Python
django中间键重定向实例方法
Nov 10 #Python
Java文件与类动手动脑实例详解
Nov 10 #Python
python语言线程标准库threading.local解读总结
Nov 10 #Python
You might like
浅谈电磁辐射对健康的影响
2021/03/01 无线电
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
php获取微信openid方法总结
2019/10/10 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python爬虫 requests-html的使用
2020/11/30 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
《会变的花树叶》教学反思
2014/02/10 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
人事局接收函
2015/01/30 职场文书
死者家属慰问信
2015/03/24 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers