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 logging模块学习笔记
May 24 Python
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
python中对list去重的多种方法
Sep 18 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 Python
python实现按任意键继续执行程序
Dec 30 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 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中CI操作多个数据库的代码
2012/07/05 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
javascript如何创建对象
2016/08/29 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
旅游文化节策划方案
2014/06/06 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
世界红十字日活动总结
2015/02/10 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android