Как перечислить все объекты и получить их атрибут? - PullRequest
0 голосов
/ 30 августа 2011

например:

obj1 = ClassName()
obj1.name = "name1"
obj2 = ClassName()
obj2.name = "name2"
obj3 = ClassName()
obj3.name = "name3"
obj4 = ClassName()
obj4.name = "name4"

и у нас есть статическая переменная, которая возвращает количество объектов: ClassName.counter

Как я могу получить obj1.name, obj2.name и другие, но если количество объектов может быть динамическим (например, используя цикл)?

PS: будет лучше, если вы скажете мне, как это сделать на питоне, но хорошо будет только дизайн.

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Вы можете использовать класс Factory, то есть объект, который обрабатывает создание и хранение ClassName объектов. Затем вы можете легко получить доступ к различным ClassName в массиве класса Factory (который должен быть Singleton)

1 голос
/ 30 августа 2011

Ну ... на самом деле не рекомендуется делать такой тип персонала, так как он немного непонятен и склонен к ошибкам ... однако, вы можете сделать это следующим образом:

class MyClass(object):
    names_list = []
    _name = None

    def get_name(self):
        return self._name
    def set_name(self, name):
        assert self._name is None
        self._name = name
        self.names_list.append(name)
    name = property(get_name, set_name)

obj1 = MyClass()
obj1.name = 'name1'

obj2 = MyClass()
obj2.name = 'name2'

print obj1.names_list
print len(obj1.names_list)

Это работает. Это ужасно. Использование некоторой внешней фабрики для обработки, вероятно, намного лучше. Если вы хотите хранить ссылки на существующие экземпляры, возможно, хорошим решением будет некоторый массив / словарь со слабыми ссылками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...