【Python小知识】-self是什么?

self在Python类中是一个非常基础但重要的概念,用大白话解释的话,可以这样理解:

1. self是什么?

self就像是类的实例的"代言人" ,代表当前正在操作的那个具体对象。打个比方:如果把类看作是一个"模板"(比如汽车设计图纸),那么实例就是根据这个模板造出来的具体"汽车"。当你要给某辆具体的汽车加油、换挡时,需要指定是哪一辆车------self就是用来指认"当前这辆车"的。

2. 在__init__方法中的作用

QueryRewriter类的__init__方法中:

python 复制代码
def __init__(self, model="qwen-turbo-latest"):
    self.model = model  # 这里的self就是实例本身
  • 当你创建实例时(比如rewriter = QueryRewriter()),Python会自动调用__init__方法来初始化这个实例。
  • 此时,self就等于刚刚创建的rewriter实例。
  • self.model = model的意思是:给这个rewriter实例绑定一个名为model的属性,并把传入的model值存进去。

3. 为什么需要self

因为类可以创建多个实例,每个实例的属性可能不同。比如:

python 复制代码
rewriter1 = QueryRewriter(model="qwen-turbo")  # 实例1用qwen-turbo模型
rewriter2 = QueryRewriter(model="qwen-plus")   # 实例2用qwen-plus模型
  • 当调用rewriter1.rewrite_context_dependent_query()时,方法内部需要知道使用的是rewriter1自己的model(即"qwen-turbo"),而不是rewriter2model
  • 这个"自己的"就是通过self来实现的------方法中的self.model会自动指向当前实例的model属性。

4. 小总结

  • self不是Python的关键字,只是一个约定俗成的名字(你也可以用其他名字,但不推荐,因为别人看不懂)。
  • 它的核心作用是连接实例和实例的属性/方法,让实例能"认出自己"并操作自己的数据。
  • 无论调用实例的哪个方法,Python都会自动把实例本身作为第一个参数传给方法,这个参数就是self

举个更通俗的例子

假设QueryRewriter是一个"翻译器工厂",每个翻译器(实例)可以用不同的语言模型:

  • 当你建一个翻译器时(rewriter = QueryRewriter(model="中文模型")),self就是这个翻译器本身。
  • 你告诉它:"你的模型是中文模型"(self.model = "中文模型")。
  • 之后当你让它翻译时(rewriter.rewrite_query(...)),它会用自己的"中文模型"来工作,而不是其他翻译器的模型------这就是self的作用。
相关推荐
wdfk_prog6 分钟前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
闲人编程6 分钟前
Elasticsearch搜索引擎集成指南
python·elasticsearch·搜索引擎·jenkins·索引·副本·分片
痴儿哈哈15 分钟前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
xuhe222 分钟前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
花酒锄作田29 分钟前
SQLAlchemy中使用UPSERT
python·sqlalchemy
SoleMotive.30 分钟前
一个准程序员的健身日志:用算法调试我的增肌计划
python·程序员·健身·职业转型
亓才孓38 分钟前
[Properties]写配置文件前,必须初始化Properties(引用变量没执行有效对象,调用方法会报空指针错误)
开发语言·python
Lsir10110_38 分钟前
【Linux】进程信号(下半)
linux·运维·服务器
Bruk.Liu43 分钟前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
酉鬼女又兒1 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器