То, что вы просите, - это найти все экземпляры объектов, которые находятся в памяти, и затем отфильтровать их только для определенного класса / подкласса / родительского класса / чего угодно, взгляните на это переполнение стека вопрос относительно того, как получить все текущие объекты и методы из памяти.
Тем не менее ... Каждый раз, когда вам нужно спросить себя, как найти ВСЕ экземпляры чего-то ГЛОБАЛЬНО в памяти, вы должны остановить себя и спрашивает (что, кажется, вы сделали, так что, слава Богу), есть ли лучший / более простой способ?
В большинстве случаев вы хотели бы сделать визуализатор данных независимым, чтобы он только потреблял данные поток (который указывается во время построения), см. ниже:
ds = myDataStream()
vis = myDataVisualizer(ds)
vis.show() # or whatever
или
ds = myDataStream()
vis = myDataVisualizer()
vis.show(ds)
Если вы хотите, чтобы визуализатор данных был агностированностью данных c, во время выполнения (например, есть данные, поступающие из нескольких источников), то у вас есть пара вариантов. Добавьте методы для удаления и добавления источников данных, или вы можете связать их вместе, используя что-то вроде шаблона «производитель-потребитель», используя Очереди и процессы (Вот как я это делаю).
НО Если вы действительно должны управлять своей собственной памятью целиком (например, с помощью карты, кучи или чего-то еще) Тогда есть шаблоны проектирования, которые могут вам помочь:
- Фабрика
- Абстрактная Фабрика
- Декоратор
- Или, может быть, какой-то другой, посмотрите на каталог по refactoring.guru