python中self是什么:指向该实例本身的引用

python中的self在定义类的时候需要去定义,在创建实例的时候或者在调用的时候会自动传入。

class Dog:def __init__(self):print("正在执行构造方法")# 定义一个jump()实例方法def jump(self):print("正在执行jump方法")

python要求,类方法(构造方法和实例方法)中至少要包含一个参数,但并没有规定此参数的名称(完全可以叫任意参数名),之所以将类方法的第一个参数命名为 self,只是 Python 程序员约定俗成的一种习惯,这会使程序具有更好的可读性。

那么,作为类方法的第一个参数,self 参数的具体作用是什么呢?打个比方,如果把类比作造房子的图纸,那么对类实例化的对象才是真正的可以住的房子,根据一张图纸,我们可以创造出成千上万的房子,虽然每个图纸长相相似,但是他们都有各自的主人。而类方法的self参数,其实就相当于每个房子的要是,他可以保证,每个房子只有主人才能够进去。

同一个类可以产生多个对象,当某个对象调用方法是,该对象会将自身的引用作为第一个参数自动传递给该方法。换句话来说,python会自动绑定类方法的第一个参数指向调用该方法的对象。这样的话,python解释器就能知道到底要操作那个对象的方法了。

对于构造方法来说,self 参数(第一个参数)代表该构造方法正在初始化的对象。

因此,程序在调用实例方法和构造方法时,不需要为第一个参数传值。例如,更改前面的 Dog 类,如下所示:

class Dog:def __init__(self):print(self,"在调用构造方法")# 定义一个jump()方法def jump(self):print(self,"正在执行jump方法")# 定义一个run()方法,run()方法需要借助jump()方法def run(self):print(self,"正在执行run方法")# 使用self参数引用调用run()方法的对象self.jump()
dog1 = Dog()
dog1.run()
dog2 = Dog()
dog2.run()

上面代码中,jump() 和 run() 中的 self 代表该方法的调用者,即谁在调用该方法,那么 self 就代表谁,因此,该程序的运行结果为:

<__main__.Dog object at 0x00000276B14B12B0> 在调用构造方法
<__main__.Dog object at 0x00000276B14B12B0> 正在执行run方法
<__main__.Dog object at 0x00000276B14B12B0> 正在执行jump方法
<__main__.Dog object at 0x00000276B14B1F28> 在调用构造方法
<__main__.Dog object at 0x00000276B14B1F28> 正在执行run方法
<__main__.Dog object at 0x00000276B14B1F28> 正在执行jump方法

参考文献

1. python中self是什么

Python: self的含义相关推荐

  1. python代码大全表解释-【初学】Python异常代码含义对照表

    原标题:[初学]Python异常代码含义对照表 Python常见的异常提示及含义对照表如下: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 Keyb ...

  2. python中[::]的含义

    python中[::]的含义 :是取值范围,','用来分割维度 需要注意的是list定义的二维数组不能用此方法取数值 最好使用nump定义的array类型 [:-1] b = [1,2,3,4,5,6 ...

  3. python的中文含义-python __all__ 含义

    1. 背景 最近看了一些代码,发现有些python文件在import 下面声明 __all__,查阅资料了解其含义. 2. 含义 约定公开接口 : 可以清晰明了的知道该文件暴露的接口, 约定成俗的调用 ...

  4. Python常用运算符含义与用法演示

    +运算符除了用于算术加法,还可以用于列表.元组和字符串的合并或连接,生成新对象: >>> 3 + (3+4j)            #整数和复数相加 (6+4j) >> ...

  5. render在python中的含义_python面试中常见易混淆概念

    可变数据类型和不可变数据类型 基本数据类型都是不可变数据类型 数字,字符串,布尔值,元组 数据结构(容器)都是可变数据类型 列表,字典,集合 不同下划线变量的含义 _单下划线开头:弱"内部使 ...

  6. python面向对象的含义_Python面向对象(一)

    什么是对象?对象:独立性.功能性.交互性万物皆对象,均继承于Object类OOP:面向对象编程,本质含义在于复用代码,在较大规模或复杂项目中有用,提高写作产量面向对象和面向过程的对比编程实例 面向过程 ...

  7. python单词的含义-Python这个单词是什么含义??????????????

    摘要: ... Python这个单词是什么含义??????????????的答案与解析↓↓本题答案和解析请扫描下面二维码↓↓ 以下为相关问题与答案和解析 附负担的赠与,其赠与物如有瑕疵的,则 ( ) ...

  8. python单词的含义-python

    [单选题]计算机网络是地理上分散的多台( )遵循约定的通信协议,通过软硬件互联的系统. (6.0分) [单选题]for i in range(int(n)) 语句中,i的取值范围为() (8.0分) ...

  9. python文件开头含义

    文章目录 概要 一.#!/usr/bin/env python 与 #!/usr/bin/python 的区别 二.# -*- coding:utf-8 -*- 概要 常见到python文件开头两行都 ...

  10. python *号的含义

    python中*代表的含义 1.表示乘号 2.表示倍数,例如: def T(msg,time=1):     print((msg+' ')*time) T('hi',3) 打印结果(打印3次): h ...

最新文章

  1. UVa272 - TEX Quotes(输入输出)
  2. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
  3. jsp调用controller方法_SpringMVC五大核心组件及调用过程
  4. 分治法 Strassen算法计算方阵相乘
  5. UITextView 和 UITextField限制字符数和表情符号
  6. 三角形一条边在另一条的投影长度计算
  7. 【OJ2726】集合问题,堆
  8. 简单python日志抓取脚本
  9. 实战 | F1060路由模式典型组网配置案例(静态路由)
  10. 数据-第16课-栈的应用实战二
  11. 华为的人力资源体系的变革
  12. 了解KVM切换器的四种类形
  13. win10安装mysql8.0,一台电脑上安装多个mysql
  14. excel三种查重方法
  15. VSCode中安装Live Server插件实现Html网页代码的实时预览
  16. 曼哈顿算法公式_距离计算方法总结
  17. mysql计算员工的日薪_mysql 综合练习(一)
  18. 人口统计、红利、康波
  19. VS2022打开项目之后提示:找不到 .NETFramework,Version=v4.0 的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。
  20. 导出iphone手机安装包的几种方法

热门文章

  1. handle与多线程
  2. 2022年全球与中国烟酰胺单核苷酸(NMN)市场现状及未来发展趋势
  3. matlab中imresize()函数用法
  4. 如何实现ArrayList的线程安全
  5. 1--STM32 ADC1与ADC2 16通道DMA采集笔记
  6. RxJava过滤操作符 filter
  7. 基于低加密指数广播攻击(Hastad攻击)的更深一步学习
  8. Xshell简单介绍与作用
  9. RNN结构,双向LSTM,Transformer, BERT对比分析
  10. 5G系统——MICO模式