Python中的析构函数

130 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的16天,点击查看活动详情

👨‍🎓作者:Java学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!

👋大家好!我是你们的老朋友Java学术趴。析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。

第十二章 析构方法

12.1 析构方法解释

  • 当一个对象被删除或者被销毁时,python解析器也会默认调用一个方法,这个方法就是 _ del_()方法,也称为析构方法。
  • 对象被删除和销毁的时间。程序运行完毕的时候
  • 这个方法就算我们不写,python也会自动帮我们调用

# 类的全部组成
class Animal(object):
​
    # 给init函数传递指定的参数。这个方法相当于Java的构造方法
    # 这个方法是在类实例化对象的时候自动调用的
    def __init__(self, name, age, type):
        self.name = name
        self.age = age
        self.type = type
​
    # 这个方法相当于Java中在实体类中声明的 toString() 方法
    def __str__(self):
        """
        指定打印对象的格式,声明这个方法后,在打印对象的时候就不是地址,
        而是这个方法中指定的格式
        :return: 对象的信息
        """
        return '名字:{},年龄:{},类型{}'.format(self.name, self.age, self.type)
​
    # 这个方法是在创建实例对象的时候执行的,每调用一次就会生成一个新的对象 cls 就是class的缩写
    # 在我们没有写这个方法的时候,python在创建类实例的时候会自动调用这个方法,写了这个方法之后就调用这个方法
    def __new__(cls, *args, **kwargs):
        """
        创建类实例对象的方法
        使用场景:可以控制创建对象的一些属性限定,经常用来做单列模式的时候使用
        :param args:
        :param kwargs:
        """
        print('=====__new__()=========')
        return object.__new__(cls) # 这里是真正创建对象实例的
​
    # 析构方法。在对象被删除或者销毁的时候调用,python会自动调用这个方法
    def __del__(self):
        """
        析构方法:对象被删除或者被销毁的时候调用。
        :return:
        """
        print('=======该对象已经被销毁============')
        pass
​
    def eat(self, food):
        """
        这个函数中的 self 相当于是Animal这个类。存在这个类中的所有属性
        定义在类的实例方法中的属性称为实例属性
        """
        # 类中的实例方法只能访问到类中的实例属性
        print('小猫的年龄是:{},喜欢的食物是:{}'.format(self.age, food))
        # print(age),在实例方法中不能直接访问到类属性
        pass
    pass
​
​
# 定义动物的实例对象
cat = Animal('花花', '3', '虎斑')
print(cat)
# =====__new__()=========
# 名字:花花,年龄:3,类型虎斑
# =======该对象已经被销毁============
  • 删除某个对象,使用del关键字

# 定义动物的实例对象
cat = Animal('花花', '3', '虎斑')
del cat

析构方法总结

  • 当整个程序脚本执行完毕之后自动调用_ _del__方法
  • 当对象被手动销毁时也会自动调用_ _del__方法
  • 析构函数一般用于资源回收,利用_ _del__方法销毁对象回收内存资源

析构函数就是python进行垃圾回收的机制