Self 的介绍 | 学习笔记

简介: 快速学习 Self 的介绍

开发者学堂课程【Python 入门 2020年版:Self 的介绍 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10368


Self 的介绍

内容介绍:

一、 创建对象语句的作用

二、def say_hello(self) 中 self 所指内容

 

一、 创建对象语句的作用

先创建一个新的 python 文件,命名为 07-self 语句的使用。

创建一个对象 s1 = Student(‘张三’,18),这段代码主要的作用是什么?

1. 调用__new__ 方法,这个方法是用来申请内存空间,在计算机中,对象就是内存空间的一块地址

代码内容如下:

class Student(object):

def __init__(self,x,y):

self.age = y

s1 = Student(‘张三’,18)

print(‘0x%X’ % id(s1))

运行后:

打印完后的地址如图显示

先解释 Student() 的用处,在内存中有一段空间就是刚刚打印出的地址,s1 = Student(‘张三’,18)这段代码用来申请内存空间,告知内存需要空间,再由 cpu 查询。

内存就像是一个宾馆一样,有用户需要房间,它来查询空房间安排客户居住并开辟一个房间号,房间号就是内存地址。

image.png

2.在调用__init__方法,并让self指向申请好的那段空间

def __init__(self,x,y):

self.name = x

self.age = y

在调用的过程中会指向所在的空间,调用 self 后,还会调用函数。这块的 self 指的就是内存空间,self.name 就是代表这块内存空间下的 name 属性对应的是 x,x是调用对象时传进的张三,这个时侯传的参数就是张三传给 x,18 传给 y。

传完之后在 self.name 的值就写成了张三,而 self.age 的值就写成了 18,这两个数据就传进去。

在写的过程中写的是张三传给 x,18 传给 y,但在真正内存里张三传给 name,18传给 age,这就要看在 self 中到底定义的属性名是什么。

定义的是 name,存的就是 name;定义的是 age,存的就是 age。

过程分析图如下:

image.png

3. 让 s1 也指向创建好的内存空间

过程分析图如下:

image.png

s1 指向内存空间,用 s1.name 提取出 s1 的名字

代码如下:

class Student(object):

def __init__(self,x,y):

self.name = x

self.age = y

s1 = Student(‘张三’,18)

print(‘s1的名字是’ ,s1.name)

运行后结果如图:

此时,打印出了 s1 的名字是 张三

 

二、def say_hello(self) 中 self 所指内容

现在定义一个函数,注意函数的缩进

def say_hello(self):

print(‘大家好,我是’,self.name)

这个函数与其他不太一样,在前面的内容,都具有一样的属性。但除此之外还有另一块属性。先简单理解一下,在内存中有一个函数

def say_hello(self):

print(self.name)

这个函数保存在原来的 Student() 类,在明白调用时函数中的 self 指的是之前,再书写一个对象

s2= Student(‘jack’,21)

这时会开辟一个新的内存空间,同样的操作会有对应得到内存地址,并且每创建一个变量就有一个变量指向内存空间。

但是函数不一样,调用时它不会在每一个变量中保存一份,它只保存一份。通过self 来进行不同的调用,用self来绑定。

例如,将 s1 的 print 语句全部换成 s1.say_hello()

改后的代码整体变为

class Student(object):

def __init__(self,x,y):

self.name = x

self.age =

def say_hello(self):

print(self.name)

s1 = Student(‘张三’,18)

s1.say_hello()

s2= Student(‘jack’,21)

运行结果如下:

这个时候是属于想要调用就可以调用,是第一个对象 s1 对这个方法的调用,此时函数中的 self 就是 s1.也就是说谁调用这个函数,这个里面的 self 就是哪一个

同理,在 s2 下面添加语句 s2.say_hello(),并删掉 s1.say_hello() 语句

代码变为:

class Student(object):

def __init__(self,x,y):

self.name = x

self.age = y

print(self.name)

s1 = Student(‘张三’,18)

s2= Student(‘jack’,21)

s2.say_hello()

运行结果为:

这时就会是 s2 进行的调用函数,就会打印出 s2 的内容。

总之 self 就是哪一个调用的该方法就是哪一个,就是当前调用的对象是哪一个那么 self 就是哪一个,s1 调用 self 是 s1,s2 调用 self 是 s2。

这个东西和 java 中的 this 是类似的

下图为过程分析图:

image.png

相关文章
|
4月前
|
数据采集 数据可视化 数据挖掘
学习笔记pirate
- 使用Python的`sklearn`进行数据预处理,包括AdaBoost回归器的网格搜索调优,处理时间序列数据,并执行数据可视化。 - 应用`transformers`库对预训练的语言模型进行微调,针对RTE、MRPC和SST-2任务进行文本分类,使用PEFT(Pointer Enhanced Fine-Tuning)模型。 - 进行图像分割任务,包括图像预处理、定义数据集、训练DeepLabV3 ResNet50模型。
|
存储 C语言 C++
C++学习笔记(day1)
C++学习笔记(day1)
|
数据安全/隐私保护
【学习笔记之我要C】练习
【学习笔记之我要C】练习
72 0
|
数据采集 SQL 消息中间件
第三阶段总结|学习笔记
快速学习第三阶段总结
131 0
第三阶段总结|学习笔记
|
算法 计算机视觉
OpenCV学习笔记--SIFT,SUFT
图像处理两大特征提取算法
139 0
|
自然语言处理 前端开发 Java
TermQuery|学习笔记
快速学习 TermQuery。
128 0
TermQuery|学习笔记
|
设计模式 XML 前端开发
回顾 | 学习笔记
快速学习回顾,介绍了回顾系统机制, 以及在实际应用过程中如何使用。
回顾 | 学习笔记
|
机器学习/深度学习 数据采集 算法
总结与回顾 | 学习笔记
快速学习总结与回顾
|
云安全 安全 网络安全
总结 | 学习笔记
快速学习总结
104 0
|
分布式计算 Hadoop Apache
regexpQuery | 学习笔记
快速学习 regexpQuery
下一篇
无影云桌面