Python中self参数的内部传递机制解析求助
搞懂Python中self的内部传递逻辑
首先得给你掰明白:self其实就是当前正在创建或操作的类实例本身,它的传递完全是Python在背后悄悄帮你搞定的,不用你手动传参。咱们结合你的代码一步步拆解:
实例创建时的self传递过程
当你写下tesla = Cars('Model S', 'Electric', 'Four door')这行代码,Python在后台做了这几件事:
- 第一步:先创建一个空的Cars实例对象(相当于先造出一辆没有任何配置的空壳特斯拉)。
- 第二步:Python自动把这个空实例作为第一个参数,传给Cars类的
__init__方法——也就是你写的def __init__(self, model, engine, doors)里的self,此时self就直接指向这个刚创建的tesla实例。 - 第三步:
__init__里的赋值代码开始工作:self.model = model就是把'Model S'绑定到tesla这个实例的model属性上,同理self.engine和self.doors也会把对应的值绑定到tesla实例上,完成整个实例的初始化。
用手动代码模拟这个过程(帮你更直观理解)
其实你可以把Python自动做的事手动写出来,虽然实际开发完全没必要,但能看清逻辑:
# 1. 创建一个空的Cars实例 empty_tesla = object.__new__(Cars) # 2. 手动把空实例作为第一个参数传给__init__方法 Cars.__init__(empty_tesla, 'Model S', 'Electric', 'Four door') # 3. 这个初始化后的实例就是你最终的tesla tesla = empty_tesla
为什么需要self?
类是一个通用模板,而实例是具体的对象。比如你同时创建了tesla和ford两个实例,当Python分别初始化它们时,self会分别指向tesla和ford,这样两个实例的属性就不会搞混——tesla的model是'Model S',ford的model是'Mustang',全靠self来区分到底是给哪个实例赋值。
内容的提问来源于stack exchange,提问作者Ben Hutton
相关产品推荐
相关产品推荐

