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中使用HTML模版的教程
Apr 29 Python
Python异常处理操作实例详解
Aug 28 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
python  logging日志打印过程解析
Oct 22 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
Python爬虫入门有哪些基础知识点
Jun 02 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python生成随机验证码代码实例解析
Jun 09 Python
python如何进入交互模式
Jul 06 Python
jupyter notebook快速入门及使用详解
Nov 13 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
使用Apache的rewrite技术
2006/06/22 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
Java的五个基础面试题
2016/02/26 面试题
实习期自我鉴定
2013/10/11 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
市场部规章制度
2014/01/24 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
代理词怎么写
2015/05/25 职场文书