最通俗理解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 自动把它传递给类方法。

面向对象是一种编程范式,它将数据和操作数据的方法打包在一起,形成对象。在 Python ,面向对象编程是一种非常常用的编程方式,可以帮助我们更好地组织代码和解决问题。下面是通俗易懂的理解和写好 Python 的面向对象的方法: 1. 类和对象:面向对象编程的核心是类和对象。类是一种数据类型,它定义了一组属性和方法,可以用来创建对象。对象则是类的实例,它可以调用类的方法和访问类的属性。 2. 封装:封装是面向对象编程的一种重要概念,它可以将数据和方法封装在一起,形成一个独立的单位。在 Python ,可以使用类来实现封装。 3. 继承:继承是面向对象编程的一种机制,它可以从已有的类派生出新的类,新的类可以继承已有类的属性和方法。在 Python ,可以使用继承来实现代码的重用。 4. 多态:多态是面向对象编程的另一个重要概念,它可以使不同的对象对相同的消息作出不同的响应。在 Python ,可以通过方法重写和方法重载来实现多态。 在 Python ,可以通过以下步骤来实现面向对象编程: 1. 定义类:使用 `class` 关键字定义一个类,然后定义类的属性和方法。 2. 创建对象:使用类名调用构造函数 `__init__` 来创建对象。 3. 访问属性和方法:使用点号 `.` 来访问对象的属性和方法,例如 `obj.attr` 和 `obj.method()`。 下面是一个简单的 Python 面向对象示例: ``` class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, my name is {self.name}, and I'm {self.age} years old.") person = Person("Alice", 30) person.say_hello() ``` 在上面的示例,我们定义了一个 `Person` 类,它有 `name` 和 `age` 两个属性,以及 `say_hello()` 方法。然后我们使用 `Person` 类创建了一个对象 `person`,并调用了 `say_hello()` 方法。 总之,面向对象编程是一种重要的编程方式,它可以帮助我们更好地组织代码和解决问题。在 Python ,可以使用类和对象来实现面向对象编程,需要掌握类和对象的概念、封装、继承和多态等重要概念。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值