最通俗理解python中的self究竟是什么?

类比和形象解释:

假设你有一张学生表,每个学生有自己的名字、年级等信息。self 就好像是每个学生自我介绍时的“我”,比如说:“我是张三,我的年级是二年级”。

在编程里,通过 self,实例就可以“知道”自己的名字、年级等属性是什么,并且能调用自己专属的方法。是不是每个人都会自称“我”?所以这就让每个人都能适用上了

它就像java中的this

例子:

我们来看一个简单的类和如何用 self

class Student:
    def __init__(self, name, grade):
        # 初始化方法,用来定义实例的初始状态
        self.name = name  # self.name 是实例的名字
        self.grade = grade  # self.grade 是实例的年级

    def introduce(self):
        # 使用 self 来访问实例的属性
        return f"Hi, I am {self.name} and I am in grade {self.grade}."

# 创建一个 Student 类的实例
student1 = Student("John", 3)

# 调用 introduce 方法
print(student1.introduce())
  1. __init__ 是一个特殊的方法(构造函数),在创建类的实例时会被调用。self.name = name 的意思是“这个实例的名字属性等于传入的名字参数”。
  2. 当我们调用 student1.introduce() 时,Python 自动把 student1 作为 self 传递给 introduce 方法。所以在方法内部,self.name 实际上就是 student1 的名字属性。
  3. 也就是说给每个传入的参数都定义了

没有 self 的对比:

如果我们不使用 self,类的方法和属性就不知道是哪个实例的。所以 self 是必须的,表明你在操作的具体是哪个对象。

更形象的解释:

如果你和一群同学在一起,而你要向别人介绍自己,你会说“我是小明”而不是“他是小明”。同样,self 就像是类中的实例在说:“我自己是谁、我有什么属性和能力”,而不是在说别人。

理论知识

python中,self 是一个类的方法(构造函数)中第一个参数,表示实例自身。

与普通的函数相比,在类中定义的函数只有两点点不同:

1、第一个参数永远是 self ,并且调用时不用传递该参数

2、在类中函数相互调用要加 self ,不加 self ,会报错: 函数未定义

除此之外,类的方法和普通函数没有区别

简单来说,self让类的方法能够访问属于该实例的属性和方法。我们可以把 self 想象成你在类内部给实例(实参)的“自我指代”,表示这个实例“我自己”的什么什么性质。

和c语言对比

而在c语言中并没有可类比的,这是因为self是面对对象oop。

在 C 语言中,结构体(struct)可以用于定义某种数据类型,它可以包含多个字段。我们可以把它类比成 Python 中的类。区别是,C 语言中的 struct 只是数据的集合,不包括方法(函数)。

  • 在 C 中,结构体 Student 用来存储数据,函数 introduce 接收结构体的指针,通过指针访问结构体的成员。

  • 在 Python 中,类 Student 是数据和方法的结合体,self 自动代表类的实例,相当于 C 语言中手动传递的结构体指针。

  • 在 C 语言中,你必须手动传递指针给函数,这样函数才能操作具体的结构体实例。在 Python 中,self 就是这个实例指针,Python 自动把它传递给类方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值