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 图片验证码代码
Dec 07 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
使用Python绘制图表大全总结
Feb 11 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
详解python3类型注释annotations实用案例
Jan 20 Python
Python绘制散乱的点构成的图的方法
Apr 21 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 var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
js下将字符串当函数执行的方法
2011/07/13 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python内存读写操作示例
2018/07/18 Python
Python中请不要再用re.compile了
2019/06/30 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
总经理职责
2013/12/22 职场文书
装修致歉信
2014/01/15 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
大一新生学期自我评价
2014/04/09 职场文书
孝女彩金观后感
2015/06/10 职场文书
民事纠纷协议书
2016/03/23 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS