import random from dataclasses import dataclass, field from typing import Self @dataclass class _Base: id: int level: int = 1 @dataclass class Hero(_Base): soliders: list["Solider"] = field(default_factory=list) def level_up(self: Self) -> Self: self.level += 1 return self @dataclass class Solider(_Base): def follow(self: Self, hero: Hero) -> None: print(f"Иду за героем {hero.id}") def main() -> None: amount_of_players = 2 heroes = [Hero(i) for i in range(2)] for i in range(amount_of_players, amount_of_players * 3 + 1): solider = Solider(i) random.choice(heroes).soliders.append(solider) amount_of_soliders = [len(hero.soliders) for hero in heroes] winner_id = amount_of_soliders.index(max(amount_of_soliders)) winner = heroes[winner_id] loser_id = amount_of_soliders.index(max(amount_of_soliders)) loser = heroes[loser_id] winner.level_up() print(winner) random.choice(loser.soliders).follow(winner) if __name__ == "__main__": main()