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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
Python编程中的异常处理教程
Aug 21 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
python里dict变成list实例方法
Jun 26 Python
Python面向对象原理与基础语法详解
Jan 02 Python
Pytorch: 自定义网络层实例
Jan 07 Python
用python实现学生管理系统
Jul 24 Python
Python 打印自己设计的字体的实例讲解
Jan 04 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
python Matplotlib模块的使用
2020/09/16 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
保护环境倡议书300字
2014/05/19 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
多人股份制合作协议书
2016/03/19 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
Tomcat配置访问日志和线程数
2022/05/06 Servers