Могу ли я получить экземпляр класса для удаления самого себя в python? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь удалить экземпляр класса, вызвав метод вне основной программы, в которой он был создан. Я понял, что для поиска мусора в экземпляре не должно быть ссылок. Это можно сделать с помощью оператора 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 удалил все ссылки на экземпляр, чтобы он действительно был удален. Возможно ли это, и если да, то как я могу это сделать?

...