Мне любопытно, почему вы хотели бы сделать такую вещь. Скорее всего, вы должны просто позволить сборке мусора делать свою работу. В python сборка мусора довольно детерминирована. Таким образом, вам не нужно беспокоиться о том, чтобы просто оставлять объекты в памяти, как это было бы на других языках (не говоря о том, что пересчет не имеет недостатков).
Хотя одна вещь, которую вам следует учитывать, - это обертка вокруг любых объектов или ресурсов, от которых вы можете избавиться позже.
class foo(object):
def __init__(self):
self.some_big_object = some_resource
def killBigObject(self):
del some_big_object
В ответ на дополнение Null :
К сожалению, я не верю, что есть способ сделать то, что ты хочешь сделать так, как ты хочешь. Вот один из способов, который вы можете рассмотреть:
>>> class manager(object):
... def __init__(self):
... self.lookup = {}
... def addItem(self, name, item):
... self.lookup[name] = item
... item.setLookup(self.lookup)
>>> class Item(object):
... def __init__(self, name):
... self.name = name
... def setLookup(self, lookup):
... self.lookup = lookup
... def deleteSelf(self):
... del self.lookup[self.name]
>>> man = manager()
>>> item = Item("foo")
>>> man.addItem("foo", item)
>>> man.lookup
{'foo': <__main__.Item object at 0x81b50>}
>>> item.deleteSelf()
>>> man.lookup
{}
Это немного грязно, но это должно дать вам идею. По сути, я не думаю, что связывание существования предмета в игре с тем, находится ли он в памяти или нет, является хорошей идеей. Это потому, что условия для предмета, подлежащего уборке мусора, вероятно, будут отличаться от условий для предмета в игре. Таким образом, вам не нужно так сильно беспокоиться об этом.