python:销毁一个对象__del__()和with语句选择哪个

前言
  • 当然选择后者啊,这还用说的?
  • 好吧,还是说说吧
正文
  • 有那么一段时间,我习惯于用_ init_()方法来初始化连接,打开,准备等操作;使用__del__()方法做销毁操作。
  • 我是一直知道其弊端的:不就是循环引用和实例多引用致使无法正常销毁实例嘛!
  • 简单的使用这种方式,一般情况是遇不到什么问题的,但当业务变得越来越复杂的时候,就会发现会出现莫名奇妙的问题,比如:1、某个操作会卡死在_ del_()方法的执行上面;2、程序抛出了莫名奇妙的异常,然后通过_ del _()默认的处理方式:sys.stderr
  • 这个时候你就会想起在类中实现一个_ enter_()和_ exit _()方法了。(讲道理,这种方法真的稳了很多)。
  • 如果你不信的话,你可以多试试,有一天你就会试出来的。你可以参考一下下面的链接,看看官方文档和别的开发者关于这方面是怎么说的。
  • 参考链接1:关于 _ del _() 的官方文档。
  • 参考链接2:stackoverflow关于_ del _() 的讨论。
补充
  • 最好的使用方法是:定义一个start()方法用于连接操作,定义一个close()方法用于断开操作,在_ enter_()和_ exit_()中分别执行二者方法.如果你生性多疑的话,也可以定义_ del _()方法并在其中也执行 close()方法的,虽然这不是一个合适的选择。(如果有父类的话,记得super()一下哦)。
  • del 关键字和__del__()是没有多大关系的。del xxx 不会主动调用__del__方法,只有引用计数 == 0时,_ del _()才会被执行,并且定义了__del__()的实例是不能解决循环引用等问题的(具体参考官方文档:“程序员的注意事项:”这一段),所以尽量别自定义__del__()。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值