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 时间操作例子和时间格式化参数小结
Apr 24 Python
Python入门篇之字典
Oct 17 Python
讲解Python中的递归函数
Apr 27 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
python制作小说爬虫实录
Aug 14 Python
深入理解Python爬虫代理池服务
Feb 28 Python
24式加速你的Python(小结)
Jun 13 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
python 操作excel表格的方法
Dec 05 Python
Python re.sub 反向引用的实现
Jul 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
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php全排列递归算法代码
2012/10/09 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python实现一个简单的MySQL类
2015/01/07 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Python解析树及树的遍历
2016/02/03 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
物流创业计划书
2014/02/01 职场文书
员工趣味活动方案
2014/08/27 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
升学宴来宾致辞
2015/07/27 职场文书
Golang 对es的操作实例
2022/04/20 Golang