前端工程师看Python类:这不就是ES6 Class吗?
·
前端转AI · 第2周 | 如果你会ES6 Class,Python面向对象你已经会了80%
开场:一张对照表
先上结论——Python的OOP和JavaScript的OOP,核心概念完全一致,只是语法略有不同:
| 概念 | JavaScript | Python |
|---|---|---|
| 定义类 | class Dog {} |
class Dog: |
| 构造函数 | constructor(name) |
__init__(self, name) |
| this指针 | this.name |
self.name |
| 继承 | class B extends A |
class B(A): |
| 调用父类 | super() |
super().__init__() |
看到了吗?就是换了套皮!
self就是this,但要自己写出来
Python类里每个方法的第一个参数必须是self,这是Python最让前端工程师不爽的地方:
class Developer:
def __init__(self, name, stack):
self.name = name # 就是 this.name = name
self.stack = stack
def introduce(self): # 必须写self!
return f"我是{self.name},技术栈:{self.stack}"
dev = Developer("龙芳", "React")
print(dev.introduce())
我的吐槽:JavaScript的this虽然指向飘忽不定(经典面试题),但至少不用每次都手动写出来啊!Python的self虽然啰嗦,但好处是——永远不会搞不清this指向谁。
装饰器 = HOC(高阶组件)
这是本周最"哇"的发现!Python装饰器的原理,和React的高阶组件一模一样:
// React HOC:包装组件,添加额外功能
function withLoading(WrappedComponent) {
return function(props) {
if (props.loading) return <Spinner />;
return <WrappedComponent {...props} />;
}
}
const EnhancedList = withLoading(UserList);
# Python装饰器:包装函数,添加额外功能
def with_timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"耗时:{time.time()-start:.2f}秒")
return result
return wrapper
@with_timer # 语法糖!等于 fetch_data = with_timer(fetch_data)
def fetch_data():
# 模拟请求
time.sleep(1)
return {"data": "ok"}
本质都是:传入一个东西 → 包一层 → 返回增强版。
这个思维模型一旦建立,你会发现Python装饰器根本不难,因为你早就在React里用过无数次了。
异常处理:try/catch换了个名
# JavaScript
try {
JSON.parse("invalid json");
} catch (error) {
console.error("解析失败:", error.message);
} finally {
console.log("不管成功失败都执行");
}
# Python
try:
import json
json.loads("invalid json")
except json.JSONDecodeError as e:
print(f"解析失败: {e}")
finally:
print("不管成功失败都执行")
唯一区别:catch → except。就这?就这。
本周心得
我的感受是:Python和JavaScript是亲兄弟。
如果说JavaScript是那个穿潮牌、啥都能干但偶尔不靠谱的弟弟,Python就是那个穿格子衫、沉稳可靠的哥哥。
语法不同,但思想相通。只要你理解了OOP的核心概念(封装、继承、多态),换一门语言就是换套衣服。
下一篇:《Python的async/await:和JS Promise链有什么区别》
如果觉得有帮助,点赞收藏不迷路 👍
更多推荐


所有评论(0)