全面理解Python中的self

Python中self用法详解 Python中类、实例以及self的详解 阅读详情

对于初学Python的同学来说,在class中经常看到self。那么,到底self是个啥?

这得从面向对象说起。Python从设计之初就已经是一门面向对象的语言,在Python中创建一个类和对象是很容易的。

比如,下面的代码片段:定义了一个类Employee

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Employee:
   '所有员工的基类'
   empCount = 0
 
   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print("Total Employee %d" % Employee.empCount)
 
   def displayEmployee(self):
      print("Name : ", self.name,  ", Salary: ", self.salary)

类,其实就是定义现实世界中的事物,人、物、等等,任何名词类的东西。比如上面定义的员工。

定义只是定义,我们定义了员工具有姓名、薪资这样的属性,但是具体到某个员工,其这些属性值一般都不一样。如何描述某个具体的员工?

有了定义,我们就可以创建实例了,这样就可以描述某个具体的员工了。其他编程语言中一般用关键字new来创建类的实例,但是在 Python 中并没有这个关键字,类的实例化类似于函数调用方式。

下面的代码:实例化Employee类

"创建 Employee 类的第一个对象"
emp1 = Employee("张三", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("王五", 5000)

注意:init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建这个类的实例的时候,就会调用该方法

而self是什么?self其实是一个占位符,代表类的实例。 当我们用上面的代码创建emp1实例的时候,它代表的是emp1这个实例;当创建emp2的时候,代表的是emp2这个实例。

因此,当我们调用下面的实例方法的时候,会分别输出实例的对应属性的值:

emp1.displayEmployee()
emp2.displayEmployee()

Name :  张三 , Salary:  2000
Name :  王五 , Salary:  5000

self是与类的实例相关的。当然,类本身的一些属性和方法,是不需要实例化也存在的,千万不要搞混淆了。

比如,前面代码中的自定义的类属性empCount。以及,下面的介绍的内置属性。

Python类的内置属性

  • dict : 类的属性的集合:包括自定义的属性
  • doc :类的文档字符串
  • name: 类名
  • module: 类定义所在的模块
  • bases : 类的所有父类构成元素

执行:

print("Employee.__doc__:", Employee.__doc__)
print("Employee.__name__:", Employee.__name__)
print("Employee.__module__:", Employee.__module__)
print("Employee.__bases__:", Employee.__bases__)
print("Employee.__dict__:", Employee.__dict__)

输出:

Employee.__doc__: 所有员工的基类
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: (<class 'object'>,)
Employee.__dict__: {'__module__': '__main__', '__doc__': '所有员工的基类', 'empCount': 2, '__init__': <function Employee.__init__ at 0x0000025F73518550>, 'displayCount': <function Employee.displayCount at 0x0000025F735185E0>, 'displayEmployee': <function Employee.displayEmployee at 0x0000025F73518670>, '__dict__': <attribute '__dict__' of 'Employee' objects>, '__weakref__': <attribute '__weakref__' of 'Employee' objects>}

还有一些Python中的内置方法,在某种情况下,会自动执行。

  • init

前面说过的,在实例化的时候,会被调用执行

  • new

在__init__触发前自动触发,调用该类时,方法是真正的类构造方法,用于产生实例化对象(空属性)。因此,可以重写__new__方法来控制对象的产生过程

  • del

用于当对象的引用计数为0时自动调用。一般被垃圾回收处理时调用。

在class里面,是不是必须使用self?

不一定,比如我们定义”静态类“的时候:

class util:
   def checkEmployee(emp):
      if isinstance(emp, Employee):
          print("Name : ", emp.name,  ", Salary: ", emp.salary)
      else:
          print("%s不是Employee" % emp)

假如,我们设计了一个工具类util:用来检测传入的参数是不是Employee类型,如果是的话,才进一步处理。

看下面的代码片段:

emp3 = "李四"

util.checkEmployee(emp1)
util.checkEmployee(emp2)
util.checkEmployee(emp3)

输出:

Name :  张三 , Salary:  2000
Name :  王五 , Salary:  5000
李四不是Employee

---------------------------END---------------------------

题外话

感谢你能看到最后,给大家准备了一些福利!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

第81篇:Vibe Coding时代:LangGraph + Eval评估体系实战,解决 Agent 优化全靠感觉的问题 本文介绍了一个为LangGraph Coding Agent设计的评估体系解决方案。文章首先指出了当前AI Coding Agent开发中的常见问题:优化过程缺乏客观评估标准,导致改进效果难以量化。随后提出了一个完整的评估框架,包括评估指标(任务成功率、质量指标、安全指标、成本指标和流程指标)、项目结构设计和评估案例集。 核心内容包括: 设计了JSON格式的评估案例集,覆盖正常任务、边界任务和高风险场景 实现了模拟Agent输出的演示代码 构建了多维度评分系统,包括关键词匹配、禁用词检测和成本评估 提供了评 阅读详情

相关推荐

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

数据下载地址:https://www.kaggle.com/datasets/andradaolteanu/gtzan-dataset-music-genre-classification/data背景音乐。专家们长期以来一直在尝试理解声音以及是什么使一首歌曲与另一首不同。如何可视化声音。是什么使一个音调与另一个不同。这个数据集希望能提供实现这些目标的机会。内容原始流派 - 包含10种流派,每种流派有100个音频文件,每个文件长度为30秒(著名的GTZAN数据集,声音的MNIST)

2145

Python——类 self

神奇的self: 在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。 class是面向对象的设计思想,instance(也即是 object,对象)是根据 class 创建的 一个类(class)应该包含 数据 和 操作数据的方法,通俗来讲就是 属性 和 函数(即调用...

m0_54162026的博客 3618

基于labview实现MYSQL数据库查询功能

基于labview实现MYSQL数据库查询功能 前言: labview是一款功能强大的图形化编程软件,也就是俗称的G语言。 本篇将介绍如何利用labview对MYSQL进行列表分页,范围查询及模糊查询等几个可广泛应用的简易功能,但事实上labview并不擅长处理数据库,下面详细代码可体现。 数据库的环境配置方面的问题这里就不赘述了。 我们直接进入主题。 1.以下为查询界面 2.分页实现细节: ...

qq470783138的博客 7557

Python中的self详细解析

1. 前言我们总会在class里面看见self,但是感觉他好像也没什么用处,就是放在那里占个位子。如果你也有同样的疑问,那么恭喜你,你的class没学明白。所以,在解释self是谁之前,我们先明确几个问题:什么是class,什么是instance,什么是object?什么是method,什么是function?1.1 什么是class,什么是instance,什么是object?Class: 可以理解为一个组装工厂。假如我们要生产一个机器人,那我们先要搭个工厂吧。先确定:我们要先安装胳膊,再安装头,我们的小

qq_38410428的博客 3万+

032、准谐振反激变换器(QR-Flyback)原理

文章摘要: 本文以65W PD快充炸管案例切入,解析准谐振反激变换器(QR-Flyback)原理。通过主动利用漏感与MOS结电容的谐振,在Vds波谷开通实现近似ZVS,显著降低开关损耗与电压应力。对比传统反激,QR模式轻载效率提升8%,Vds尖峰减少23%。关键设计要点包括:变压器漏感需<3%、谷底检测电路需抗干扰、启动阶段需防过冲。推荐NCP1340等专用控制芯片,并强调VCC电容优选低ESR陶瓷材质。QR适用于30W-150W场景,其核心优势在于轻载效率优化,但需平衡漏感控制与可靠性。作者结合实测数据与

Jack010169的博客 118

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 371

学习笔记——Python类中的self到底是干啥的

Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了。 1、self是什么 在python的类中self代表实例本身,明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。具体来说,是该实例的内存地址。在调用实例的方法时,Python解释器会自己把实例!!变量!!传给类的函数中的se

weixin_51130521的博客 8820

阻抗控制器实现机器人关节运动控制

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章如:PID反馈控制器、前馈控制器、前馈+反馈控制器等等如:机械臂模型(几何解算)控制器、小车底盘运动学模型(几何解算)的控制器、四足机器人模型(预测迭代)的控制器等等如:微分平坦(无人机的轨迹跟随)等等如:MPC优化控制算法如:线性二次调节器(LQR)是基于模型的控制器,使用车辆状态来使误差最小化,Apollo使用LQR进行横向控制。横向控制包含四个组件:横向误差、横向误差的变化率、朝向误差和朝向的变化率。

qq_35635374的博客 364

Python类中的self是什么意思?

在学习Python会发现,类的方法(构造方法和实例方法)中都会有一个固定参数self 。这个self就是指实例对象自身,用来作为参数代替实例对象。

m0_62346827的博客 8454

RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10

Rockchip RK3588是一款强大的多核处理器,广泛应用于边缘计算、人工智能、嵌入式系统等领域。为了在RK3588上运行自定义的Linux系统,并使用Qt5WebEngine进行Web内容渲染,Buildroot是一个非常合适的工具。本文将详细介绍如何使用Buildroot编译并配置Qt5WebEngine-5.15.10。Qt5WebEngine是Qt框架中的一个模块,它提供了一个功能强大的Web浏览器引擎,允许开发者在Qt应用程序中嵌入和显示现代网页内容。

flypig has a dream! 1158

【用unity实现100个游戏之34】使用环状(车轮)碰撞器(Wheel Collider)从零实现一个汽车车辆物理控制系统,实现一个赛车游戏

本文介绍了在Unity中使用Wheel Collider组件实现3D车辆物理控制系统的详细步骤。主要内容包括: Wheel Collider参数详解:包括基础参数(质量、半径等)、悬挂弹簧系统(弹力、减震等)和摩擦力设置(前向/侧向摩擦曲线)。 准备工作流程: 导入赛车模型、赛道和树木素材 为车身添加Rigidbody和MeshCollider 创建四个Wheel Collider并调整参数(半径、悬挂距离等) 优化摩擦系数设置防止侧滑 实现车辆控制: 通过代码控制车轮前后移动和转向 提供底盘系统设置(四轮

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2658

python中关于self的理解

假设有一个类nameMain(), 如最下面代码 类 : 一个抽象的模板。可以理解为抽象设计图 类名:类的名字。 查看/实现方式 :print(nameMain)或者print(self.class) 类的实例:即类创建的对象,类每创建一个实例就开辟新的内存地址指向这个创建的实例。抽象设计图具体实现的东西 查看/实现方式 : a=nameMain(带参/无参) self : 表示类创建的实例/对象本身,指向当前创建对象的内存地址。在__init__魔方方法中创建 类可以创建很多不同的实例,这些实例又有自

weixin_46220517的博客 1万+

Freeswitch DTMF 按键无法接收问题修复

freeswitch 在接收到 update后,会更新成新的 payload type,但是给的200响应,仍然是旧的,这时候就会导致手机侧认识需要发送旧的payload,所以发到 fs 后就会导致直接丢包,不去处理RTP包了。呼叫时需要设置通道变量 rtp_manual_rtp_bugs=ACCEPT_ANY_PAYLOAD ,这时候FS 就不会对包的payload进行判断,直接判定通过。应该修复 freeswitch 给响应时,应该根据收到的 payload 发送给手机,但是一直未找到正确的路径。

2301_81507069的博客 373

理解python中的self,这一篇就够了

在介绍Python的self用法之前,先来介绍下Python中的类和实例…… 我们知道,面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以用一个Student类来表示。而实例是根据类创建出来的一个个具体的“对象”,每一个对象都从类中继承有相同的方法,但各自的数据可能不同。 1、以Student类为例,在Python中,定义类如下: cl...

Stephen 7万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python中self的个人理解

1. self = 对象自身 2. 对象拥有的方法和属性,我们在对象内部都可以通过self.来进行访问,所以self就是对象自身。 3. 定义类的时候并不是所有方法都需要传入self参数,只要你想在这个方法内部操作对象的时候才需要传入self。 ...

qq_42262610的博客 4206

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

python类中的self的理解

初次接触类的概念,在学习的网页上,对self的解释是self是方法的一个参数,在方法调用的时候,这个参数是默认传参数的 我们看一个例子 class Stu: def __init__(self,name,age): print("在__init__方法中id:",id(self)) self.name = name self.age = age def run(self): print("在run方法中",id(sel

zr1213159840的博客 794

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

一张图理解Python中的self

 大家按照1.2.3.顺序来看 标题

weixin_42282564的博客 213

如何理解 Python 中的 self

selfselfself是一个常规参数名,用于引用类的实例。它不是 Python 的关键字,而是一个约定。作用:通过self,你可以在类的方法中访问实例的属性和方法。self是 Python 类中非常重要的概念,它允许你在类的方法中访问和操作实例的属性和方法。通过理解self的使用,你可以更好地掌握面向对象编程的基本原理,并编写出更清晰、更灵活的代码。希望这篇博客能帮助你更好地理解和使用self!如果你有任何问题或需要进一步的帮助,请随时联系我。

weixin_53002211的博客 4214

Python如何理解函数中的self

self是Python面向对象模型的核心机制,通过显式绑定实例引用,实现了动态性、多态性和代码复用。理解其底层原理(如方法解析顺序MRO)和最佳实践(如命名规范、属性封装),能显著提升代码的可维护性和扩展性。

软件测试技术的博客 874

深入理解python之self

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。 self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白的。下例中将self改为myname一样没有错误: 1 class Person: 2

轻锋的专栏 750

python self 值自动改变,在python中对self的理解

在python中对self的理解 :一、self的位置是出现在哪里?首先,self是在类的方法中的,在调用此方法时,不用给self赋值,Python会自动给他赋值,而且这个值就是类的实例--对象本身。也可以将self换成别的叫法例如seef,但不建议,因为大家习惯也默认了写成self。写代码时,类的方法系统直接就有了self,如下:其次,self是类方法默认的第一个参数而且是必须的,不写会报错。二...

weixin_28704675的博客 1348

Python -- 关于self理解

如果不是编写程序的练习,如果不是一遍一遍的反复琢磨和查找资料,一个人根本不可能成长。 就像self,这个都说是孤独的小伙子。他的存在你说重要吗?重要把。你说不重要,也确实看着就烦。 为什么烦,因为他自身没有意义,就像写了个函数, def xxx(self): 不写self就报错,但是他放在那里又不明意义,是一个很奇奇怪怪的单词?? 要不是有这篇文章,我到现在都还是迷在self,这玩意有什...

Lkong一的资料军需库 763

Python中self的理解

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

lengyue的专栏 2万+

python中self用法详解_全面理解Python中self的用法

刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问。self代表类的实例,而非类。实例来说明:class Test:def prt(self):print(self)print(self.__class__)t = Test()t.prt()执行结果如下从上面的例子中可以很明显的看出,...

weixin_39633113的博客 377

Python中self个人理解

#1.self代表类的实例,而非类 class Stest: def p(self):#可将self理解为实例t print(self) print(self.__class__) t = Stest()#t为Stest的实例 t.p() 运行结果: <__main__.Stest object at 0x00000000021D8860>...

与君共勉 2万+

python类中的self怎么理解_怎么理解类中的self

class Dog(object):#object: dog类继承object类def __init__(self,name,age,color):#给dog类定义了name.color,age三个属性self.name = nameself.age = ageself.color = colordef eat(self):print(self.name,"啃骨头")def run(self):p...

weixin_39958248的博客 748
上一篇: Python Plotly交互可视化详解
下一篇: 学Python必须知道的八大网站!
Python_P叔
博客等级 码龄3年 5451粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值