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 BeautifulSoup设置页面编码的方法
Apr 03 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
Python高级特性与几种函数的讲解
Mar 08 Python
Python基于百度AI实现OCR文字识别
Apr 02 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
python 实现波浪滤镜特效
Dec 02 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 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中一个完整表单处理实现代码
2011/11/10 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
详解Python中的日志模块logging
2015/06/19 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
python mysql断开重连的实现方法
2019/07/26 Python
基于FME使用Python过程图解
2020/05/13 Python
python 监控logcat关键字功能
2020/09/04 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
Android笔试题总结
2014/11/29 面试题
应届毕业生个人自荐信范文
2013/11/30 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
初中优秀学生评语
2014/12/29 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
2016父亲节感恩话语
2015/12/09 职场文书