网站首页 > 技术文章 正文
大家学Python面向对象的时候,总会遇到一个让人难以理解的存在:self
这个self到底是谁啊,为什么每个类实例方法都有一个参数self,它到底有什么作用呢?
「先下结论:类实例化后,self即代表着实例(对象)本身」
想要理解self有个最简单的方法,就是你把self当做「实例(对象)的身份证。」
Python的类不能直接使用,只有通过创建实例(对象)才能发挥它的功能,每个实例(对象)都是独一无二的,它可以调用类的方法、属性。类就像灵魂附体一样,让实例(对象)有了自己(self)的功能。

初学者会发现,类的方法(构造方法和实例方法)中都会有一个固定参数self,其实这个参数就是代表着实例(对象)本身,就像是一个身份证,实例可以凭着身份证去调用类方法。

类比人类,人类就是一个Python类,每个个体的人代表着实例(对象),而每个人的身份证代表的Python中self,每个人可以凭借身份证去上大学、坐高铁、住酒店...(方法),而Python中的实例(对象)也可以凭着self去调用类的方法。

上面是用类比的方法解释了下self的含义,说到底self就是代表着实例本身,「当某个实例(对象)调用类方法时,该对象会把自身的引用作为第一个参数自动传给该方法,而这第一个参数就是self。」
而且self只是约定俗成的写法,你可以用任何其他名称代替self,不会改变代码含义,只不过我们一般不这样做。
为了更好的说明self的作用,我们来举个例子,下面有一个Students类:
class Students:
# 构造方法
def __init__(self,name):
self.name = name
# 实例方法
def study(self,examination_results):
self.examination_results = examination_results
print("同学{}的考试分数是{}".format(self.name,self.examination_results))
print("该实例对象的地址是{}".format(self))
先来个实例student_a
studend_a = Students('studend_a')
print(studend_a.name)
?
结果打印出:studend_a
?
再来个实例student_b
studend_b = Students('studend_b')
print(studend_b.name)
?
结果打印出:studend_b
?
可以看出,实例(对象)不一样,打印出的结果也不一样,当类被实例化后,self.name其实就等于实例(对象).name
还是以刚刚的代码为例,我们再来调用里面的实例方法,里面会打印出self,就能看得更加明显了
实例student_a:
studend_a = Students('studend_a')
print(studend_a.study(80))
输出结果:
?
同学studend_a的考试分数是80 该实例对象的地址是<「main」.Students object at 0x00000129EB0F6A90>
?
实例student_b:
studend_b = Students('studend_b')
print(studend_b.study(80))
输出结果:
?
同学studend_b的考试分数是80 该实例对象的地址是<「main」.Students object at 0x00000129EB0F6B38>
?
大家能清楚看到两个实例打印出的self是不一样的,因为self代表着实例(对象)本身。
以实例student_b来说,打印self出现下面对象信息
<__main__.Students object at 0x00000129EB0F6B38>
如果再打印 student_b,会出现同样的结果
print(student_b)
输出:
<__main__.Students object at 0x00000129EB0F6B00>
这个时候是不是就清楚了,类实例化后,self即代表着实例(对象)本身
猜你喜欢
- 2024-12-19 如何使用Python连接MySQL数据库?
- 2024-12-19 pandas中基于范围条件进行表连接
- 2024-12-19 Vaex:秒开大数据、比pandas更快更好的Python库
- 2024-12-19 别说你会用Pandas
- 2024-12-19 学思践悟,深学笃行——Python在大数据审计中的应用
- 2024-12-19 Dask库一个神奇处理大数据在python的库
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)