类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。

虽然你可以给这个参数任何名称,但是强烈建议你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些IDE(集成开发环境)也可以帮助你。

给C++/Java/C#程序员的注释Python中的self等价于C++中的self指针和Java、C#中的this参考。

你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。

声明add()方法时,若不加self,则提示

TypeError: add() takes exactly 2 arguments (3 given)
File "D:\PythonWorkplace\PythonDemo\Tet.py", line 15, in <module>
  test.add(1,3)

错误。

拓展一下:

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

self是一种习惯,如上面的程序,把sayHi(self)换成sayHi(fles),同样可以得到正确的输出。

Python中默认参数self的理解相关推荐

  1. python 外部参数过长_介绍python中slice参数过长的处理方法及实例

    python教程栏目介绍slice参数过长的处理方法 很多小伙伴对于slice参数的概念理解停留在概念上,切片的参数有三个,分别是step .start .stop .因为参数的值也是多变的,所以我们 ...

  2. 软件测试学习 之 Python 函数默认参数

    转载说明 作者:珞樱缤纷 出处:博客园 博文:Python进阶-函数默认参数 Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的 ...

  3. Python中inplace参数

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python中inplace参数 [太阳]选择题 对于以下python代码表述错误的一项是? ...

  4. html绑定带有形参的函数,Python中函数参数类型和参数绑定

    参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...

  5. python 函数 默认参数

    python 函数 默认参数 def add(a=1, b=2): # a,b设置默认参数c = a + breturn c c = add(a=2) # 如果不填,就是默认参数 print(c) 4

  6. Python中浅拷贝和深拷贝的理解与研究

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

  7. python使用默认参数

    python使用默认参数 使用默认参数,可以简化代码的量,使得代码更加的简单. 默认参数必须放在位置参数的后面. 1.代码 def stu_register(name,age,course,count ...

  8. python url解码_对python中url参数编码与解码的实例详解

    一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...

  9. Python中浅拷贝和深拷贝的理解与研究 1

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

最新文章

  1. ddos中的tcp反射攻击技术分析
  2. 机器学习笔记: attention
  3. ML与Information:机器学习与Information信息论之间那些七七八八、乱七八糟、剪不断理还乱的关系攻略
  4. 笔记-信息系统安全管理-网络安全工具
  5. Git笔记(16) 变基
  6. 11.4 Daily Scrum
  7. 使用plugins让打包更便捷
  8. 驱动设计ARM(6410)-按键驱动0基础知识点
  9. Cartographer ROS for Turtlebots 初探
  10. 问题的分析与解决(培训总结)
  11. Spring Boot @Transactional 配置事务管理
  12. linux中posix共享内存,Linux 共享内存(POSIX)
  13. 微信java sdk 多公众号_Java版微信公众号支付开发全过程
  14. idea中字体由繁体变简体
  15. java课程心得_Java课程的感想
  16. STM32cubeMX I2S DMA双缓冲配置
  17. kryo com.esotericsoftware.kryo.KryoException: Buffer underflow.
  18. 社保系统成个人信息泄露重灾区 涉及超30省
  19. 计算机学院王春枝教授实验室,全国高等学校计算机科学与技术教学成果获奖证书.doc...
  20. 人生第一份跳槽面试经历

热门文章

  1. 企业微信jssdk分享接口管理系统
  2. win 2008 64位IIS7出现数据库链接出错的解决办法
  3. Android 多模块项目入门
  4. [Angularjs]ng-select和ng-options
  5. ubuntu apache fastcgi 虚拟主机安装
  6. IE9为啥没有加载进度进度提示
  7. 什么是BETA,RC,ALPHA版 - 软件命名规范
  8. Mozilla 修复跨平台加密库 NSS 中的严重漏洞
  9. 苹果新漏洞 “Shrootless” 可使攻击者在macOS 系统上安装后门
  10. 新型APT组织正在攻击全球的政府实体