0

I have two classes Player and LineUp, one is used within the other (shown below). I am trying to update my LineUp class after I have already instantiated it.

class Player:
    def __init__(self, player_df):
         self.name = player_df["Name + ID"]
         self.position = player_df["Position"]
         self.salary = player_df["Salary"]
         self.score = player_df["DFS Total"]
         self.game_info = player_df["Game Info"]
         self.team = player_df["TeamAbbrev"]

class LineUp:
    def __init__(self, qb: Player, rb1: Player, rb2: Player, wr1: Player, wr2:Player, wr3: Player, te: Player, flex: Player, dst:Player):
        self.qb = qb
        self.rb1 = rb1
        self.rb2 = rb2
        self.wr1 = wr1
        self.wr2 = wr2
        self.wr3 = wr3
        self.te = te
        self.flex = flex
        self.dst = dst

   def get_salary(self):
    return self.qb.salary + self.rb1.salary + self.rb2.salary + self.wr1.salary + self.wr2.salary + self.wr3.salary + self.te.salary + self.flex.salary + self.dst.salary
    
   def get_total(self):
    return self.qb.score + self.rb1.score + self.rb2.score + self.wr1.score + self.wr2.score + self.wr3.score + self.te.score + self.flex.score + self.dst.score
  
   def __len__(self):
    return 9

   def __getitem__(self, i):
    if i == 0:
        return self.qb
    elif i == 1:
        return self.rb1
    elif i == 2:
        return self.rb2
    elif i == 3:
        return self.wr1
    elif i == 4:
        return self.wr2
    elif i == 5:
        return self.wr3
    elif i == 6:
        return self.te
    elif i == 7:
        return self.flex
    elif i == 8: 
        return self.dst

   def __str__(self):
    return f'{self.qb.name}, {self.rb1.name}, {self.rb2.name}, {self.wr1.name}, {self.wr2.name}, {self.wr3.name}, {self.te.name}, {self.flex.name}, {self.dst.name}'

So I start with a lineup:

my_lineup = LineUp(Player(player1_data), ..., Player(playerX_data))

I then want to update player 1 in my_lineup, so I try to assign

my_lineup[0] = Player(new_player1_data)

Ideally, I'd like to do this by indexing since I am planning to loop through them. For example:

for j in range(len(my_lineup)):
     if x and y and z:
         my_lineup[j] = Player(new_player_data)
     else:
         continue

Now when I print my_lineup I want to see the new player with the rest of the old already assigned players. Basically trying to replace Players in the LineUp while maintaining my_lineup.

4
  • I guess you are asking about __setitem__ but why don't you just put your Player objects in a list inside Lineup? then __getitem__ and __setitem__ would just return self.lineup_list[i] or self.lineup_list[i] = item Commented Dec 17, 2023 at 7:08
  • 1
    I would use list for players instead of qb rb1 rb2 wr1 wr2. And if you needs these names then maybe keep players as dictionary - self.players = {'gb': player_data, ...} and later access them with my_lineup.players['gb'], etc. And dictionary allows to loop them too. Commented Dec 17, 2023 at 7:28
  • If you want to be able to loop through the players, why don't you make your class an iterator, rather than implementing indexing? Commented Dec 17, 2023 at 7:57
  • I changed it to a dictionary self.players = {"qb" : player_data, ...}, and now can easily swap them out. Thanks for the suggestion! Commented Dec 17, 2023 at 15:25

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.