Home > Net >  Python Class. One def get for several attribute
Python Class. One def get for several attribute

Time:02-03

I need help to be more clear how to make my code correctly. Now it's work but I still think the code logic not correct :) I have one class with several attributes:

class Game:

    def __init__(self, player1, player2, player3, player4, score_pair1, score_pair2):
        self.player1 = player1
        self.player2 = player2
        self.player3 = player3
        self.player4 = player4
        self.score_pair1 = score_pair1
        self.score_pair2 = score_pair2
        self.Online_Players_Dict = []
        self.Temp_Players_Dict = []
        self.Temp_import_players = []

I have method inside of this class for work with all attributes:

   def create_temp_players(self):
        for i in ('player1', 'player2', 'player3', 'player4'):
            temp = self.__getattribute__(i)
            if not isinstance(temp, Player):
                for ii in self.Temp_import_players:
                    if ii['name'] == self.__getattribute__(i):
                        self.__setattr__(i, Player(self.__getattribute__(i), ii['score'], ii['daily_score']))
                        b = self.__getattribute__(i)
                        a = dict(name=b.name, score=b.score, daily_score=b.daily_score)
                        self.Online_Players_Dict.append(a)
                temp = self.__getattribute__(i)
                if not isinstance(temp, Player):
                    self.__setattr__(i, Player(self.__getattribute__(i)))
                    b = self.__getattribute__(i)
                    a = dict(name=b.name, score=b.score, daily_score=b.daily_score)
                    self.Online_Players_Dict.append(a)
                    self.Temp_Players_Dict.append(a)

And everything work correct, but I think not right to use (getattribute) and (setattr) here. But I can't find other way to correct interaction attributes in the code. Do you have any idea how to make it better?

PS: Class Player also has attribute:

class Player:

    def __init__(self, name, score=500, daily_score=0):
        self.name = name
        self.score = score
        self.daily_score = daily_score

CodePudding user response:

I changed code like this

for player, i in zip(self.players, (0, 1, 2, 3)):
            if not isinstance(self.players[i], Player):
                for ii in self.Temp_import_players:
                    if ii['name'] == self.players[i]:
                        self.players[i] = Player(self.players[i], ii['score'], ii['daily_score'])
                        a = dict(name=self.players[i].name, score=self.players[i].score, daily_score=self.players[i].daily_score)
                        self.Online_Players_Dict.append(a)
                if not isinstance(self.players[i], Player):
                    self.players[i] = Player(self.players[i])
                    a = dict(name=self.players[i].name, score=self.players[i].score, daily_score=self.players[i].daily_score)
                    self.Online_Players_Dict.append(a)
                    self.Temp_Players_Dict.append(a) 

Later will refactoring all self.playerX to self.player[X]

  • Related