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 31 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
在Python中增加和插入元素的示例
Nov 01 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
Python基础之函数的定义与使用示例
Mar 23 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
python 并发下载器实现方法示例
Nov 22 Python
如何通过Django使用本地css/js文件
Jan 20 Python
详解Django中异步任务之django-celery
Nov 05 Python
python中time tzset()函数实例用法
Feb 18 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及Zend Engine的线程安全模型分析
2011/11/10 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Django中使用group_by的方法
2015/05/26 Python
Python绘制七段数码管实例代码
2017/12/20 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python实现飞船大战
2020/04/24 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
总经理的岗位职责
2014/02/23 职场文书
向领导表决心的话
2014/03/11 职场文书
党员十八大心得体会
2014/09/12 职场文书
公司租房协议书
2014/10/14 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript