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 相关文章推荐
python3中bytes和string之间的互相转换
Feb 09 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
python利用Tesseract识别验证码的方法示例
Jan 21 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
python使用建议技巧分享(三)
Aug 18 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
numpy数据类型dtype转换实现
Apr 24 Python
使用Django实现商城验证码模块的方法
Jun 01 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
第十四节--命名空间
2006/11/16 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
python实现excel读写数据
2021/03/02 Python
用python爬取租房网站信息的代码
2018/12/14 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
ORACLE第二个十问
2013/12/14 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
读群众路线心得体会
2014/03/07 职场文书
门前三包责任书
2014/04/15 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
小学校长个人总结
2015/03/03 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
MySQL数据库表约束讲解
2022/06/21 MySQL