Python中为什么要用self探讨


Posted in Python onApril 14, 2015

接触Python以来,看到类里的函数要带个self参数,一直搞不懂啥麻子原因。晚上特别针对Python的self查了一下,理理。

Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)

为何Python给self赋值而你不必给self赋值?

例子说明:创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2) ,这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)

这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。

实例:

class Python:

 def selfDemo(self):

  print 'Python,why self?'

p = Python()

p.selfDemo()

输出:Python,why self?

把p.selfDemo()带个参数如:p.selfDemo(p),得到同样的输出结果

如果把self去掉的话,

class Python:

 def selfDemo():

  print 'Python,why self?'

p = Python()

p.selfDemo()

这样就报错了:TypeError: selfDemo() takes no arguments (1 given)

扩展

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

在Python3之后不知道将self隐了没?感觉在Python类里的方法都要带个self这样有点死板

Python 相关文章推荐
numpy中的delete删除数组整行和整列的实例
May 09 Python
python和shell监控linux服务器的详细代码
Jun 22 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
pandas DataFrame创建方法的方式
Aug 02 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
java字符串格式化输出实例讲解
Jan 06 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
如何使用python包中的sched事件调度器
Apr 30 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 #Python
详解Python中for循环的使用
Apr 14 #Python
Python中join和split用法实例
Apr 14 #Python
Python中__name__的使用实例
Apr 14 #Python
Python中的列表知识点汇总
Apr 14 #Python
Python中使用copy模块实现列表(list)拷贝
Apr 14 #Python
复习Python中的字符串知识点
Apr 14 #Python
You might like
php adodb操作mysql数据库
2009/03/19 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
对python3新增的byte类型详解
2018/12/04 Python
Python chardet库识别编码原理解析
2020/02/18 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
学校司机岗位职责
2013/11/14 职场文书
国际商务系学生个人的自我评价
2013/11/26 职场文书
主题酒店策划书
2014/01/28 职场文书
给实习单位的感谢信
2014/02/01 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
2015年重阳节主持词
2015/07/04 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
转变工作作风心得体会
2016/01/23 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL