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 相关文章推荐
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
python实现批量下载新浪博客的方法
Jun 15 Python
Python中元组,列表,字典的区别
May 21 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
Django ModelForm操作及验证方式
Mar 30 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
详解Python yaml模块
Sep 23 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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游戏编程25个脚本代码
2011/02/08 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
JS实现公告上线滚动效果
2021/01/10 Javascript
Python3中使用PyMongo的方法详解
2017/07/28 Python
Python装饰器用法示例小结
2018/02/11 Python
python实现猜单词小游戏
2020/05/22 Python
详解python编译器和解释器的区别
2019/06/24 Python
python django model联合主键的例子
2019/08/06 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
python搜索算法原理及实例讲解
2020/11/18 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
车贷收入证明范本
2014/01/09 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
开服装店计划书
2014/08/15 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
信用卡收入证明范本
2015/06/12 职场文书