@anton_zaboev

Как перебрать и добавить в список все экземпляры класса?

Всем добрый вечер! Подскажите пожалуйста как правильно перебрать и добавить в список все экземпляры класса?
вот код
class Hero(object):
    # heroes = []
    def go_right(self):
        print("Я иду направо")

    def go_left(self):
        print("Я иду налево")

    def observe(self):
        print("Я осматриваюсь")

    def __init__(self):
        super().__init__()


pythomir = Hero()
flaskomir = Hero()
djangomir = Hero()

heroes = []

for item in Hero:
    heroes.append(item)
print(heroes)

assert len(heroes) == 3, "в списке не три героя"
assert isinstance(pythomir, Hero) , "pythomir – не экземпляр Hero"
assert isinstance(flaskomir, Hero) , "flaskomir – не экземпляр Hero"
assert isinstance(djangomir, Hero) , "djangomir – не экземпляр Hero"


В данный момент решил проблему вот так
heroes.append(pythomir)
heroes.append(flaskomir)
heroes.append(djangomir)

Но хотелось бы узнать как это можно сделать покрасивее
  • Вопрос задан
  • 3892 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Никак, твоё решение с тремя .append() правильное.
Если при создании экземпляра класса он сам себя не регистрирует в каком-то списке или иной коллукции, то узнать о нём из другой части программы не получится.
А если и получится, то это потребует чертовски неочевидного хака, которым лучше не пользоваться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Как вариант
class Hero(object):
    heroes = []
    
    def go_right(self):
        print("Я иду направо")

    def go_left(self):
        print("Я иду налево")

    def observe(self):
        print("Я осматриваюсь")

    def __init__(self):
        super().__init__()
        Hero.heroes.append(self)
        
    def __del__(self):
        Hero.heroes.remove(self)

pythomir = Hero()
flaskomir = Hero()
djangomir = Hero()

heroes = Hero.heroes

assert len(heroes) == 3, "в списке не три героя"
assert isinstance(pythomir, Hero) , "pythomir – не экземпляр Hero"
assert isinstance(flaskomir, Hero) , "flaskomir – не экземпляр Hero"
assert isinstance(djangomir, Hero) , "djangomir – не экземпляр Hero"


P.S. Питонисты, придите и закидайте шапками если что не так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы