2014-01-04 6 views
2

У меня есть класс под названием Mobilesuits, и каждый экземпляр этого класса имеет атрибут, называемый координатами, который состоит из координат его сетки, которые находятся в списке (x, y, z).Как я могу ссылаться на все экземпляры классов одновременно?

Я пытаюсь сделать радиолокационный метод, который будет определять, насколько близко данный автомобиль относится к другим транспортным средствам, но не может найти способ ссылки на все координаты объектов одновременно. Есть ли простой способ сделать это в Python? Я не хочу поддерживать список всех транспортных средств, и каждый раз, когда я хочу выполнить глобальные изменения, переходим через весь список с циклом for, но это единственный способ, о котором я могу думать.

ответ

1

Сохраните ссылку на каждый экземпляр в списке классов. ИМО не так сложно поддерживать, ни глобальный список.

class Mobilesuits: 
    instances = [] 
    def __init__(self): 
     Mobilesuits.instances.append(self) 

Очевидно добавить, что еще нужно для __init__. Если вы посмотрите на Mobilesuits.instances вне класса, вы получите список его экземпляров.

Если вы действительно очень не хочу, чтобы сохранить список вы можете сделать что-то действительно сомнительное (и если честно, ИДК, как безопасно) с дс:

import gc 

mobile_suits = [o for o in gc.get_objects() if isinstance(o, Mobilesuits)] 

но серьезно, просто держать список

+0

Вау, это абсолютно блестящий. Раньше я не знал об этой функциональности. Большое спасибо! Вы сделали мой вечер –

0

Я не хочу, чтобы поддерживать список

Это то, что вы призваны делать; и вам все равно придется использовать петли. Вы фактически просите язык автоматически создать список для вас. Ну, зачем? Вопреки тому, что вы ожидаете, вы почти всегда будете не нужен или нужен список всех экземпляров класса, когда-либо созданного. На самом деле, это полностью возможно, что вы даже не хотите этого для текущей программы (вы еще это понимаете или нет). На практике есть все возможные причины, почему вы можете создавать экземпляры, которые не подлежат «обычной» обработке.

Смежные вопросы