为了账号安全,请及时绑定邮箱和手机立即绑定

销毁类python的对象

销毁类python的对象

叮当猫咪 2023-06-13 19:15:18
如果满足 if 语句的条件(在一段时间内),我正在尝试销毁一个类对象global variablecheckclass createobject:        def __init__(self,userinput):             self.userinput = input             self.method()                 def method(self):             while True:                if self.userinput == variablecheck                     print('the object created using this class is still alive')                                                  else:                    print('user object created using class(createobject) is dead')                    #what code can i put here to delete the object of this class?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

这样想:你要求一个类使用内部方法自毁,这有点像试图吃掉自己的嘴。


幸运的是,Python 具有垃圾收集功能,这意味着一旦所有引用都超出范围,您的类将自动销毁。


如果您需要在实例被销毁时做一些特定的事情,您仍然可以覆盖__del__()它,这有点像析构函数。这是一个愚蠢的例子:


class SelfDestruct:

    def __init__(self):

        print("Hi! I'm being instanciated!")

    

    def __del__(self):

        print("I'm being automatically destroyed. Goodbye!")


    def do_stuff(self):

        print("I'm doing some stuff...") 

现在,尝试在本地范围(例如函数)中实例化此类:


def make_a_suicidal_class():

    my_suicidal_class = SelfDestruct()

    for i in range(5):

        my_suicidal_class.do_stuff()

    return None

在这里,对象的生命周期受函数约束。这意味着它会在调用完成后自动销毁。因此输出应该是这样的:


>>> make_suicidal_class()

"Hi! I'm being instanciated!"

"I'm doing some stuff..."

"I'm doing some stuff..."

"I'm doing some stuff..."

"I'm doing some stuff..."

"I'm doing some stuff..."

"I'm being automatically destroyed. Goodbye!"

>>>

如果你的类是在全局范围内实例化的,那么在你的程序结束之前它不会被销毁。


另外,应该注意手动调用__del__()析构函数并不会真正销毁对象。这样做:


foo = SelfDestruct()

foo.__del__()

foo.do_stuff()

结果是这个输出:


"Hi! I'm being instanciated!"

"I'm being automatically destroyed. Goodbye!"

"I'm doing some stuff..."

因此,实例仍然有一个脉冲......如果你真的需要防止实例在当前范围内再次被引用,你必须调用del foo这样做。


尽管如前所述,Python 实际上对类和变量进行引用计数。因此,如果您的类对象在其他地方使用,调用del foo实际上不会从内存中释放它。


这是 python 文档中详尽的解释 https://docs.python.org/2.5/ref/customization.html


“del x”不直接调用 x。del ()——前者将x的引用计数减1,后者仅在x的引用计数为零时调用。


长话短说:别想了!让python处理内存管理。垃圾收集的全部意义在于不再担心变量的生命周期!


查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信