Уведомления

Группа в Telegram: @pythonsu

#1 Май 18, 2012 22:27:55

xmarat
Зарегистрирован: 2012-05-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

Всем добрый вечер. Как можно пройтись по объектам(для чтения, изменения параметров, вызова методов) определенного класса? Заранее благодарен за ответы.

Офлайн

#2 Май 18, 2012 23:19:25

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

Хранить все инстансы класса где-нибудь. Например, создавать объекты с помощью менеджера, который будет добавлять их к себе в список и выводить этот список при вызове соответствующего метода. (Или просто в самом классе).

Ну и ставшая уже традиционной рубрика "Поиск в интернете для лентяев программистов" - 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)

Офлайн

#3 Май 19, 2012 00:18:57

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

можно еще через стандартный атрибут так:

for i in spisok: #список экземпляров любых классов
    if i.__class__==Class1:
        [y for y in i.__dict__]

Отредактировано buddha (Май 19, 2012 00:36:22)

Офлайн

#4 Май 19, 2012 00:23:34

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

Во-первых, для i.__class__ == Class1 есть isinstance(i, Class1). Во-вторых, вопрос был в том, откуда взять список.

PS. Интересная конструкция )

[y for y in i.__dict__]
Для этого есть dict.keys(). Хотя не очень понятно к чему тут этот список вообще.

Нельзя в ночи такие вопросы задавать :) Вот что из этого выходит
>>> 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)

Офлайн

#5 Май 19, 2012 00:42:11

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

Чем больше вариантов прочувствуешь, тем гибче,на мой взгляд, можно решать какие-либо задачи. Программирование-это ж творчество, нет? -)

to xmarat, ты бы написал свой пример, куда лучше на конкретике.

Отредактировано buddha (Май 19, 2012 00:43:14)

Офлайн

#6 Май 19, 2012 00:46:15

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

buddha, больше вариантов, не значит лучше. Больше хороших вариантов - лучше. А вы пишете нечто, не соответствующую ни pep8, ни вопросу :) Футбольный комментатор во мне говорит нечто стандатное вроде “по мысли хорошо, но исполнение подвело”.

А вообще пора спать идти.



Офлайн

#7 Май 19, 2012 00:53:15

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

Да, хоспаде. К чему это всё-хорошо , плохо. Время все по своим местам расставит.

Отредактировано buddha (Май 19, 2012 00:56:16)

Офлайн

#8 Май 19, 2012 12:08:46

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

“iexx:
блин, вот за что люблю программирование, так это за то, что одно и тоже можно сделать десятью разными способами.

Obormotik:
и за 8 из них получить …..лей от вышестоящих прогеров”

http://bash.im/quote/404335 :)



Офлайн

#9 Май 19, 2012 15:51:31

xmarat
Зарегистрирован: 2012-05-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как пройтись по объектам определенного класса?

Честно, перед тем как задать вопрос, искал ответ в гугле, но так и не нашел. Наверно потому что искал на русскоязычных сайтах. Вопрос решился данным методом:

import gc
for obj in gc.get_objects():
    if isinstance(obj, some_class):
        dome_something(obj)

Всем спасибо за ответы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version