Форум сайта python.su
0
Всем добрый вечер. Как можно пройтись по объектам(для чтения, изменения параметров, вызова методов) определенного класса? Заранее благодарен за ответы.
Офлайн
52
Хранить все инстансы класса где-нибудь. Например, создавать объекты с помощью менеджера, который будет добавлять их к себе в список и выводить этот список при вызове соответствующего метода. (Или просто в самом классе).
Ну и ставшая уже традиционной рубрика "Поиск в интернете для лентяев программистов" - Google: ‘get class instances python’ / ‘get instances of class python’ дают ответы в первых же ссылках. Например, грубый способ:
import gc for obj in gc.get_objects(): if isinstance(obj, some_class): dome_something(obj)
Отредактировано fata1ex (Май 18, 2012 23:26:02)
Офлайн
15
можно еще через стандартный атрибут так:
for i in spisok: #список экземпляров любых классов if i.__class__==Class1: [y for y in i.__dict__]
Отредактировано buddha (Май 19, 2012 00:36:22)
Офлайн
52
Во-первых, для i.__class__ == Class1 есть isinstance(i, Class1). Во-вторых, вопрос был в том, откуда взять список.
PS. Интересная конструкция )
[y for y in i.__dict__]
>>> class A(object): ... pass >>> a, b = A(), A() >>> filter(lambda obj: isinstance(obj, A), map(eval, dir())) [<__main__.A object at 0xa2699ec>, <__main__.A object at 0xa26994c>]
Отредактировано fata1ex (Май 19, 2012 00:43:17)
Офлайн
15
Чем больше вариантов прочувствуешь, тем гибче,на мой взгляд, можно решать какие-либо задачи. Программирование-это ж творчество, нет? -)
to xmarat, ты бы написал свой пример, куда лучше на конкретике.
Отредактировано buddha (Май 19, 2012 00:43:14)
Офлайн
52
buddha, больше вариантов, не значит лучше. Больше хороших вариантов - лучше. А вы пишете нечто, не соответствующую ни pep8, ни вопросу :) Футбольный комментатор во мне говорит нечто стандатное вроде “по мысли хорошо, но исполнение подвело”.
А вообще пора спать идти.
Офлайн
15
Да, хоспаде. К чему это всё-хорошо , плохо. Время все по своим местам расставит.
Отредактировано buddha (Май 19, 2012 00:56:16)
Офлайн
20
“iexx:
блин, вот за что люблю программирование, так это за то, что одно и тоже можно сделать десятью разными способами.
Obormotik:
и за 8 из них получить …..лей от вышестоящих прогеров”
http://bash.im/quote/404335 :)
Офлайн
0
Честно, перед тем как задать вопрос, искал ответ в гугле, но так и не нашел. Наверно потому что искал на русскоязычных сайтах. Вопрос решился данным методом:
import gc for obj in gc.get_objects(): if isinstance(obj, some_class): dome_something(obj)
Офлайн