网站首页 > 技术文章 正文
在python中,无论是在__init__方法,还是自定义的方法中,他们都必有第一个参数 self
初学者可能会对这个参数很迷惑,这个参数好像没啥用,毕竟又不需要传参,每次定义函数又必须写上,你可能会觉得很麻烦,而且很容易忘记写入
class Car:
def __init__(self,name):
self.name=name
def say(self):
print('this is a car name {self.name}')
self 是实例的身份标识
举个例子,如果按照图纸建造了许多房子,那么那些业主是怎么区分哪个房子是自己的呢?
很简单,建造完成之后,都会有门牌号或者说几栋几单元几层及门牌号之类的,房主买房子类似于初始化,房主买了哪个房子就和哪个门牌号进行了绑定,这样即使房子再多也不会走错啦。
self相当于一个身份标识,可以将类对象和函数进行对应的绑定,所以在调用同一个方法时,因为有self绑定而不会混乱。
简单来说,实现类对象和属性及方法的绑定。
class Test:
def say(self):
print(self)
print(self.__class__)
t = Test()
t.say()
<__main__.Test object at 0x0000015EA79AB890> #类的实例
<class '__main__.Test'>
从上面的例子中可以很明显的看出,self代表的是类的实例。
self可以不写吗
如果我们在定义和传递时都不传递 self,是可以的,这个时候是类方法了
class Test:
def say():
print('hello')
Test.say()
输出:hello
如果不写self,变成了类方法是可以的,只能通过类调用。
但是如果我们试图在定义方法时不传入self 而使用类对象调用时,就会提醒我们需要多传递一个参数
class Test:
def say():
print('hello')
t = Test()
t.say()
#直接报错
TypeError: Test.say() takes 0 positional arguments but 1 was given
必须是 self 吗?
如果有一些童鞋学习过别的语言然后学习Python,可能总觉得 self 怪怪的,想写成java中的 this,可以吗?当然是可以的。
代码测试一下:
class Test:
def say(this):
print(this)
print(this.__class__)
t = Test()
t.say()
<__main__.Test object at 0x00000182EF2CB8D0>
<class '__main__.Test'>
改成this后,运行结果完全一样。
当然最好还是尊重约定俗成的习惯,使用self。
总结一下:
- self 在定义时需要定义,在调用时会自动传入。
- self 总是指调用时的类的实例。
- self 的名字并不是规定死的,但是最好还是按照约定使用self。
- 上一篇: 为什么计算机中0.1+0.2不等于0.3?
- 下一篇: Python 中关于除法的三种运算符
猜你喜欢
- 2025-05-27 Python6大基础运算符,看完这篇之后会让你有一个彻底认识
- 2025-05-27 SymPy:如何用 Python 求解微积分
- 2025-05-27 Python编程术语词汇表(一)
- 2025-05-27 Python 中关于除法的三种运算符
- 2025-05-27 为什么计算机中0.1+0.2不等于0.3?
- 2025-05-27 Python基础学习笔记之运算符
- 2025-05-27 「每日一练」巧用python找出1000以内的所有完数
- 2025-05-27 Python魔法方法:__eq__方法
- 2025-05-27 什么是函数(Python
- 2025-05-27 python编程学习系列:求平方根
- 258℃Python短文,Python中的嵌套条件语句(六)
- 258℃python笔记:for循环嵌套。end=""的作用,图形打印
- 257℃PythonNet:实现Python与.Net代码相互调用!
- 252℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 107℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 83℃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)