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监控网站运行异常并发送邮件的方法
Mar 13 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
python让列表倒序输出的实例
Jun 25 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
Python基础之操作MySQL数据库
May 06 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
Python日志模块logging用法
Jun 05 Python
Python first-order-model实现让照片动起来
Jun 25 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
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
采用call方式实现js继承
2014/05/20 Javascript
JavaScript window.location对象
2014/11/14 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
Vue程序调试的方法
2019/06/17 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
python解析中国天气网的天气数据
2014/03/21 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python 性能优化方法小结
2017/03/31 Python
python实现泊松图像融合
2018/07/26 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
python链表类中获取元素实例方法
2021/02/23 Python
python SOCKET编程基础入门
2021/02/27 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
中专生职业生涯规划书范文
2014/01/10 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
优秀广告词大全
2014/03/19 职场文书
春风行动实施方案
2014/03/28 职场文书
小班评语大全
2014/05/04 职场文书
单位绩效考核方案
2014/05/11 职场文书
地震捐款倡议书
2014/08/29 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书