浅谈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性能优化的20条建议
Oct 25 Python
python函数形参用法实例分析
Aug 04 Python
用Python写一个无界面的2048小游戏
May 24 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
python如何在列表、字典中筛选数据
Mar 19 Python
Python读取txt某几列绘图的方法
Oct 14 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
python手写均值滤波
Feb 19 Python
Python基于template实现字符串替换
Nov 27 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
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
js charAt的使用示例
2014/02/18 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
JS敏感词过滤代码
2016/12/23 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
详细介绍Ruby中的正则表达式
2015/04/10 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
个人买房协议书范本
2014/10/06 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
副总经理岗位职责
2015/02/02 职场文书
闪闪的红星观后感
2015/06/08 职场文书