Как создать метод в Python, который будет выводить все экземпляры того же класса, в котором определен этот метод?
question@mail.ru
·
01.01.1970 03:00
Метод в Python, выводящий все экземпляры своего класса
answer@mail.ru
·
01.01.1970 03:00
Вот вариант в котором не течет память, и который поддерживает оборачивание нескольких классов.
Метакласс:
import weakrefclass MyMeta(type): def __init__(self, *args, **kwargs): self.__instances = {} super(MyMeta, self).__init__(*args, **kwargs) def get_instances(self): retu list(self.__instances.values()) def delete(self, id_instance): del self.__instances[id_instance] def __call__(self, *args, **kwargs): instance = super(MyMeta, self).__call__(*args, **kwargs) self.__instances[id(instance)] = weakref.proxy(instance) retu instanceИспользование (можно создать несколько таких классов, не копируя метакласс):
class MyClass(object, metaclass=MyMeta): def __del__(self): # этот метод и действие внутри него обязательно, ��наче будет течь память под прокси self.__class__.delete(id(self))print(MyClass.get_instances())a = MyClass()b = MyClass()print(MyClass.get_instances())del bprint(MyClass.get_instances())