Форум сайта python.su
Доброго времени суток.
Очередной глупый вопрос.
Как Python хранит объекты класса в списке?
Допустим есть список с кучей объектов разных классов:
[<__main__.Healer object at 0x0000029CBBAFF7F0>, <__main__.Healer object at 0x0000029CBBAFF100>, <__main__.Healer object at 0x0000029CBBAFFC70>, <__main__.Lancer object at 0x0000029CBBB0B1F0>, <__main__.Lancer object at 0x0000029CBBB0B220>, <__main__.Lancer object at 0x0000029CBBB0B2B0>, <__main__.Warlord object at 0x0000029CBBAFFD90>]
first_unit = row.pop(row.index(Healer)-1)
row.index(Healer)
Отредактировано Alexey_mne31 (Окт. 3, 2021 19:20:39)
Офлайн
Alexey_mne31 а у вас не особо много то варантов, перебираете все элементы пока не натолкнетесь на первый “Healer”.
Дальше уже идут варианты реализации, можо просто фором пройтись по списку, можно через генератор списков, можно через filter..
[code python][/code]
Отредактировано PEHDOM (Окт. 3, 2021 21:25:30)
Офлайн
PEHDOMблин, я похоже как-то неправильно выражаюсь постоянно…
е идут варианты реализации, можо просто фором пройтись по списку, можно чер
def move_units(self): if not self.has(Warlord): return else: Healer.order = 1 Lancer.order = 2 Warrior.order = 3 Warlord.order = 4 if self.has(Healer): row = self.units row.sort(key = lambda x: x.order) row.reversе row2 = [k.name for k in row] row2.reverse first_unit = row.pop(row2.index('healer')-1) row.reverse row.insert(0, first_unit) return
row2 = [k.name for k in row]
first_unit = row.pop(row2.index('healer')-1)
Офлайн
Alexey_mne31Тут проблема скорее в том что вы код пишете “не так”. Это называется рвать гланды через жопу.
блин, я похоже как-то неправильно выражаюсь постоянно…
Alexey_mne31
Подскажите, как бы вы это сделали?
all_units=[] moving_units=[] ... my = SomeMoving() all_units.append(my) moving_units.append(my) .... for u in moving_units: u.step()
class UnitBase: .... def step(self): pass class MovingUnit(UnitBase): ..... def step(self): move() fight() all_units=[] .... for u in all_units: u.step()
Отредактировано doza_and (Окт. 4, 2021 07:42:37)
Офлайн
> Допустим есть список с кучей объектов разных классов:
Хранить разные типы в одном списке это очень хреновая идея. Разбей свой список на несколько или делай список кортежей.
Офлайн
Rodegastпотому что …
Хранить разные типы в одном списке это
Офлайн
AD0DE412Потомо что в питоне вы не можете статически (то есть на этапе компиляции) гарантировать что конкретный объект имеет конкретный метод. Это ведет к тому, что AtributeError вы получите только в рантайме. Если эта ошибка случается по условию, то вам следует очень ответственно подходить к покрытию вашего кода тестами. И вы скорее всего не покроете все кейсы, потому что здесь не обойтись юнит тестами.
потому что …
Офлайн
ok
Офлайн