我试图通过调用创建它的主程序之外的方法来删除类的实例。我从搜索周围收集到为了被垃圾收集,实例必须没有引用。在主程序中使用del
语句将执行此操作,但我还需要通过方法删除实例,否则实例将很快堆积起来。我的代码是这样的:
class Agent_type:
def __init__(self, type_name, properties):
self.type_name = type_name
self.properties = properties
self.agent_set = set()
class Agent:
def __init__(self, agent_type):
self.properties = agent_type.properties
self.agent_type = agent_type
agent_type.agent_set.update([self])
def kill(self):
self.agent_type.agent_set.remove(self)
del self
def kill(agent):
agent.agent_type.agent_set.remove(agent)
del agent
programmer = Agent_type('programmer', {'language' : 'python'})
agent_1 = Agent(programmer)
print(agent_1)
print(programmer.agent_set)
agent_1.die()
# kill(agent_1)
print(programmer.agent_set)
print(agent_1)
del(agent_1)
print(programmer.agent_set)
try:
print(agent_1)
except:
print("agent deleted")
我得到的输出是:
<__main__.Agent object at 0x01A59290>
{<__main__.Agent object at 0x01A59290>}
set()
<__main__.Agent object at 0x01A59290>
set()
agent deleted
如果我运行kill(agent_1)
而不是agent_1.die()
,输出不会改变。我需要的是使用kill或die方法删除对实例的所有引用,以便实际删除它。这是可能的,如果可以,我该怎么做?