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 httplib模块使用实例
Apr 11 Python
用python写的一个wordpress的采集程序
Feb 27 Python
jupyter安装小结
Mar 13 Python
Python中标准模块importlib详解
Apr 16 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
Django中反向生成models.py的实例讲解
May 30 Python
Django学习笔记之为Model添加Action
Apr 30 Python
详解python深浅拷贝区别
Jun 24 Python
Python hmac模块使用实例解析
Dec 24 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
Python 多线程处理任务实例
Nov 07 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
一个SQL管理员的web接口
2006/10/09 PHP
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP钩子实现方法解析
2019/05/21 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
PHP7 list() 函数修改
2021/03/09 PHP
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
Django入门使用示例
2017/12/12 Python
Django中使用Celery的教程详解
2018/08/24 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
python实现手势识别的示例(入门)
2020/04/15 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
幼儿园中秋节活动方案
2014/02/06 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
骨干教师事迹材料
2014/12/17 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏