网站首页 > 技术文章 正文
杂谈
python中存在 self 这个参数,记得有个朋友是写 java 的,当他看到python中的代码立刻明白了它的用途。
他问我:“为什么python中的 self不能像this一样,隐式声明多好,少写一个代码。”
起初我也回答不上来,确实 隐式 会更加方便,那为什么要显式写 self 呢?
一、隐式和显式
self和this 其实用途一致,都是代表当前实例,那有的朋友可能不太理解什么叫显式,什么叫隐式,我这里举个例子:
隐式
// java 隐式
class Person {
String name;
int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
显式
# python 显式
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
我们可以看 java 的 this 部分,完全没有在参数里声明,但直接可以使用,这就是隐式;而反观 pythpn的self,得在方法中写出这个参数才能使用。
二、self到底是什么?
为了更好说明显式的优势,有必要给一些不太了解 self 的朋友解释一下它的用途。
如果官方一点 self 是指向实例本身,可能很多朋友也不太好理解。
那如果白话一点,每个对象就是一个人,那么 self 翻译过来就是 那个人自己。
实例化说明
现在我们使用之前的 Person 来说明一下这些情况,如果我们声明一个 小王,self 就是像下面这样的情况。
那如果现在实例化为小李,那将是下面的情况了:
那我们平时因为用中文用的比较少,基本用的是英文,我们换成平常写的形式:
self 不是一个固定的变量,它的变量是类实例化时,实例出来的对象是什么,它就是什么。换句话说,self 就是实例对象的本身。
三、显式的好处
相比this更加明确
使用 this 的朋友肯定遇到过指向不明确的情况,这里一个 this 那边一个 this,有的是 闭包里的this,有的是 实例的this,有的是 lambda的this,各种 this 令人崩溃。
这个时候就能体现显式的好处了,只有 显式 填写的才有相应 self,不填写的就没有。
那有人可能问什么时候要填写?
在python中填写 self 的地方不是我们自己定的,基本都已经包含在语法里了,而且如果用 ide代码智能提示 的,它将会自动提示:
ide自动生成
完全无需操心,ide会自动生成,用就是了。
区分了函数和方法
很多人可能不太明白什么叫 函数和方法,其实挺好区分的:函数就是一组代码;方法就是对象的一组代码。
在其他隐式 this 的语言中,函数还是方法 在肉眼上看是区分不出来的,而在python中它们非常好区分。
# 请问下面哪个是函数?哪个是方法
def say_hello(self):
pass
def say_hello():
pass
其实很明显,带self的 就是方法,没有带self的 就是函数。
这有什么用途呢?用途非常大,在使用 猴子补丁 时,如果你看到下面的代码:
def change_method(self):
pass
a = A()
a.method = change_method
只需要一眼就能明白,这个方法是用来修改对象中的方法。
四、总结
对于卡卡而言,确实觉得python中显式 self 比 隐式 this 好用多了,作为全栈开发者,对此深有体会。
如果你不太明白 self 的用途,那么需要更多地去使用面向对象,届时就会明白它的好处!
猜你喜欢
- 2025-07-24 Python语言中的运算符(python中运算符的用法)
- 2025-07-24 Python自动化办公应用学习笔记13——表达式
- 2025-07-24 Python基础知识点总结(python基础重点)
- 2025-07-24 揭秘Python内置函数:为什么高手都离不开它们?
- 2025-07-24 Python基础入门之自定义函数详解(python 自定义方法)
- 2025-07-24 Python 闭包:深入理解函数式编程的核心概念
- 2025-07-24 Python异常处理 让程序更稳健(python 异常处理方法)
- 2025-07-24 Python中的函数注释:参数有冒号,声明后有-> 箭头
- 2025-07-24 Python编程之旅:定义自定义异常的艺术
- 2025-07-24 Python源代码文件字符编码声明(python文件指定编码)
- 287℃Python短文,Python中的嵌套条件语句(六)
- 283℃PythonNet:实现Python与.Net代码相互调用!
- 282℃python笔记:for循环嵌套。end=""的作用,图形打印
- 280℃Python实现字符串小写转大写并写入文件
- 277℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 136℃原来2025是完美的平方年,一起探索六种平方的算吧
- 123℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 114℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
- 标签列表
-
- 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)