аватар question@mail.ru · 01.01.1970 03:00

Метод в Python, выводящий все экземпляры своего класса

Как создать метод в 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())

Последние

Похожие