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使用递归解决全排列数字示例
Feb 11 Python
Python统计日志中每个IP出现次数的方法
Jul 06 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
python检测服务器端口代码实例
Aug 31 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
python爬虫爬取图片的简单代码
Jan 18 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
python多次执行绘制条形图
Apr 20 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
mac下安装nginx和php
2013/11/04 PHP
php读取3389的脚本
2014/05/06 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
js数组的操作详解
2013/03/27 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
Javascript复制实例详解
2016/01/28 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
详解Python中用于计算指数的exp()方法
2015/05/14 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
人机交互程序 python实现人机对话
2017/11/14 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
函授毕业自我鉴定
2014/02/04 职场文书
本科生求职信
2014/06/17 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
黄河绝恋观后感
2015/06/08 职场文书
初中历史教学反思
2016/02/19 职场文书