ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

类实例化时魔法方法调用顺序

2021-06-01 15:35:45  阅读:129  来源: 互联网

标签:__ 调用 s1 魔法 实例 del print self


class Student(object):
    def __new__(cls, *args, **kwargs):
        print('__new__')
        return object.__new__(cls)   # 必须返回父类的__new__方法,否则不不执行__init__方法,无法创建实例
 
    def __init__(self,name):
        print('__init__')
        self.name = name
 
    def __str__(self):                # 作用:打印实例时显示指定字符串,而不是内存地址
        print('__str__')
        return self.name
 
    def __call__(self, *args, **kwargs):        # 当执行C()(*args) 或者 s1(*args) 就会执行__call__
        print('__call__',*args)
 
    def __del__(self):                # 作用:清除无用的实例对内存的暂用
        print('__del__')
 
#1、实例化时机会执行__new__、__init__
s1 = Student('tom')
 
#2、执行 实例()  就会执行__call__ 方法,并将参数传递给__call__函数
s1('call01')
 
#3、当打印实例时就会执行 __str__ 方法下返回的字符串(默认返回的实例地址)
print(s1)
 
#4、析构方法:当删除实例时就会调用 __del__ 方法
del s1
# 析构方法作用:在程序结束后会自动执行析构方法删除所有实例
# 但是在程序运行时有很多实例是无用的,但是python内存回收机制却不会自动删除他们,这样就浪费内存
# 我们可以执行 del s1 ,那么在程序运行时,python内存回收机制会检测到这些实例时无用的,才会删除
# 其实我们执行del s1,并没有回收内存,只不过是摘除门牌号,python内存回收机制发现没有门牌号后会自动回收内存

标签:__,调用,s1,魔法,实例,del,print,self
来源: https://www.cnblogs.com/zyaa/p/14837359.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有