Python删除类对象
我正在寻找一种方法来删除一个类的实例,我看到的安全地删除实例的方法与Clint Miller提出的方法类似。对于我正在尝试做的,这似乎不是一个可行的选择 我的问题是,下面的方法是否可以安全地摆脱类实例,如果不能,如何(如果有的话)对其进行修改以使其安全Python删除类对象,python,oop,Python,Oop,我正在寻找一种方法来删除一个类的实例,我看到的安全地删除实例的方法与Clint Miller提出的方法类似。对于我正在尝试做的,这似乎不是一个可行的选择 我的问题是,下面的方法是否可以安全地摆脱类实例,如果不能,如何(如果有的话)对其进行修改以使其安全 class myClass: _reg = [] def __init__(self, *args): self.args = args self._reg.append(self) .
class myClass:
_reg = []
def __init__(self, *args):
self.args = args
self._reg.append(self)
...
def close(self):
self._reg.pop(self._reg.index(self))
myClass的实例只有这样创建:myClass(arg1,arg2…
与此相反:a=myClass(arg1,arg2…
或通过类似myFunc
的函数创建。当不再需要该实例时,将调用其close函数
def myFunc(*args):
...
myClass(newArg1, newArg2...)
另外,您可以假设不会对myClass.\u reg
中的项目进行新的引用,并提前感谢
编辑:注册表的存在是为了跟踪myClass
实例的存在。这不仅仅是一种试图立即删除它们的过于复杂的方式(如果是这样的话,我可能不会创建它们)
每个实例需要存在和执行为简洁(和相关性)而省略的功能的时间量变化很大
至于为什么我需要确保删除未使用的实例,需要在未指定的时间创建新的实例,并且每个实例的某些预期功能将开始相互冲突,如果不删除或以其他方式禁用它们,将很难处理这些冲突。除此之外,如果发生这种情况,实例列表几乎肯定会变得非常长,这可能会导致其他问题。为什么要保存对实例的引用?为什么需要显式删除实例?可以,但重点是什么?如果您从未将实例分配给变量,那么当它们超出范围时,它们将被销毁。那么,为什么要添加一个您不需要的注册表,只是为了做一些无论如何都会发生的事情呢?添加注册表是因为这是一种简单的方法,可以让另一个函数(此处未提及)检查myClass所有实例的状态,并且我需要将它们保留一段未指定的时间。显式优于隐式(Python的禅宗)。先执行
a=myClass(arg1,arg2,…)
,然后执行my\u common\u列表。追加(a)
。或创建函数
(IMHO应与类分开)这一步就可以做到。但是不要把它放在\uuuuu init\uuuu
中。一般来说,你不希望在\uuuuu init\uuuuu
中出现这种副作用。另外\ureg
列表也应该与myClass
分开。你向我们展示的代码将很难维护。顺便说一句close
方法不是线程afe.从理论上讲,您当前拥有的应该足够了。只要对象从\u reg
弹出,它的引用计数就应该下降到1(引用计数通常比您预期的高1),垃圾收集器将对其进行清理。您还可以通过调用gc.collect()在那里强制清理,然后在close()
。您必须稍微使用gc
模块,以确保您所期望的正在发生。但这一切听起来都很糟糕。为什么要保存对实例的引用?为什么需要显式删除实例?可以,但有什么意义?如果您从未将实例分配给变量,它们会被删除'将在它们超出范围时被销毁。那么,为什么要添加一个不需要的注册表,而只做一些无论如何都会发生的事情呢?添加注册表是因为使用另一个函数(此处未提及)很容易能够检查myClass的所有实例的状态,我需要将它们保留一段未指定的时间。显式优于隐式(Python的Zen)。先执行a=myClass(arg1,arg2,…)
,然后执行my_common_list。附加(a)
。或者创建函数
(IMHO应该与类分开)这一步就可以做到。但是不要把它放在\uuuuu init\uuuu
中。一般来说,你不希望在\uuuuu init\uuuuu
中出现这种副作用。另外\ureg
列表也应该与myClass
分开。你向我们展示的代码将很难维护。顺便说一句close
方法不是线程afe.从理论上讲,您当前拥有的应该足够了。只要对象从\u reg
弹出,它的引用计数就应该下降到1(引用计数通常比您预期的高1),垃圾收集器将对其进行清理。您还可以通过调用gc.collect()在那里强制清理,然后在close()
。您必须稍微玩弄一下gc
模块,以确保您所期望的正在发生。不过,这一切听起来都很糟糕。