您的位置: 网站首页> python面向对象> 当前文章
self是什么?__init__要return吗?实例化对象的内存过程
老董-我爱我家房产SEO2020-04-04177围观,133赞
上一节有1个遗留问题self,为了彻底认识self,我们首先得理解定义1个类并创建1个对象时在内存里发生了什么。
# -*- coding:utf-8 -*- class Person: def __init__(self,my_name,skill): print(f'创建对象{my_name}...') self.name = my_name # 实例变量 self.ability = skill # 实例变量 # 实例方法 def sleep(self,time_num): print(f'{self.name}休息{time_num}分钟') if __name__ =="__main__": p1 = Person('乔峰','降龙十八掌') p1.sleep(3)
创建对象乔峰... 乔峰休息3分钟
初始化1个对象就会申请1块内存空间存储该对象,为了完成这个操作,初始化1个对象会经历以下步骤:
1)定义类(class Person)时会申请一块内存空间,这是类的内存地址,Person指向它。
2)创建对象(Person())时也会申请一块内存空间,执行__init__方法时该空间的内存地址会自动作为__init__的第1个参数(即self)。
3)构造方法__init__也可能有其他参数,其内部执行self.xxx=yyy会把参数绑定到对象的内存空间,赋予了对象属性值;
4)返回self(即返回这个对象)。自动返回,不需要程序员写。
self是什么?
通过以上流程,我们可以感受到self就代表对象本身,如果创建p1对象就是p1,创建p2对象就是对象p2,self.name=my_name等价于p1.name=my_name。实例化时python解释器会自动把这个对象本身通过self参数传进去。
self可以改名吗?
可以,你可以写self也可以写sb,无论写什么,他都会出现在__init__函数参数列表的第一个来代表对象本身。但是为了可读性和通用性在python中默认写成self。
__init__要return吗?
不需要。
如果你多此一举最后写return self。他会报错TypeError: __init__() should return None,
如果你想提前结束__init__可以用单独的return(不带返回值)。如果在__init__方法最后写个return则不影响结果。
# -*- coding:utf-8 -*- class Person: def __init__(self,my_name,skill): print(f'创建对象{my_name}...') return # 下面的不执行 self.name = my_name # 实例变量 self.ability = skill # 实例变量 if __name__ =="__main__": p1 = Person('乔峰','降龙十八掌') print(p1.name) # 报错 'Person' object has no attribute 'name'
创建对象乔峰... Traceback (most recent call last): File "D:/py3script/python66/object/2_2.py", line 13, in <module> print(p1.name) # 报错 'Person' object has no attribute 'name' AttributeError: 'Person' object has no attribute 'name'
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
self是什么?__init__要return吗?实例化对象的内存过程文章写得不错,值得赞赏
站点信息
- 网站程序:Laravel
- 客服微信:a772483200