python - 我可以在 python 中获取一个类的实例来删除自身吗?
问题描述
我试图通过调用创建它的主程序之外的方法来删除类的实例。我从周围搜索中收集到,为了进行垃圾收集,实例必须没有引用者。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 方法删除对实例的所有引用,以便实际删除它。这是可能的,如果可以,我该怎么做?
解决方案
推荐阅读
- java - 如何让 ExecutorService 创建 n 个线程执行完全相同的任务?
- javascript - 更新全日历事件中传递的变量
- python - 如何处理“|as_crispy_field 传递了一个无效或不存在的字段”错误消息?
- javascript - Micro:bit 扩展“程序错误:取消引用 Null/未定义值”
- ios - 如何通过应用程序状态创建一致的 UNUserNotification?
- java - 如何按名称和状态对 JPA 存储库查询进行排序?
- android - 如何创建旋转的自定义加载图像?
- c# - 在 Windows 10 中使用 WPF 代码,如何获取当前正在运行的程序的所有窗口(不仅仅是顶层窗口)?
- docusignapi - 使用 eSign SDK 创建 DocuSign 用户而不发送激活电子邮件?
- sql-server - 仅在添加“GO”命令后运行的 SQL 脚本