Python классы дают неверные результаты при использовании значений инициализации по умолчанию - PullRequest
1 голос
/ 24 апреля 2020

Ниже приведены две версии одного и того же кода. Разница в том, что классы Team и School имеют значения по умолчанию при инициализации в неправильной версии, тогда как в правильной первой версии переменная инициализируется без ввода пользователя. Происходит что-то тонкое, что я не могу понять. Что является причиной неправильных результатов во второй версии?

Версия 1, она работает правильно:

# Player class
class Player:
    # Complete the implementation
    def __init__(self, ID, name, teamName):
        self.ID = ID
        self.name = name
        self.teamName = teamName

# Team class contains a list of Player
# Objects
class Team:
    # Complete the implementation
    def __init__(self, name):
        self.name = name
        self.players = []

    def addPlayer(self, player):
        self.players.append(player)

    def getNumberOfPlayers(self):
        return len(self.players)

# School class contains a list of Team
# objects.
class School:
    def __init__(self, name):
        self.name = name
        self.teams = []

    def addTeam(self, team):
        self.teams.append(team)

    def getTotalPlayersInSchool(self):
        player_count = 0
        for team in self.teams:
            player_count += team.getNumberOfPlayers()
        return player_count


# Complete the implementation

# code to test the implementation
# remove backticks when you want to test the implemenation of your code

p1 = Player("Harris", 1, "Red");
p2 = Player("Carol", 2, "Red");

p3 = Player("Johnny", 1, "Blue");
p4 = Player("Sarah", 2, "Blue");

red_team=Team("Red Team")
red_team.players.append(p1)
red_team.players.append(p2)

blue_team=Team("Blue Team")
blue_team.players.append(p2)
blue_team.players.append(p3)

mySchool=School("My School")
mySchool.teams.append(red_team)
mySchool.teams.append(blue_team)

print("Total players in my school:", mySchool.getTotalPlayersInSchool())

Версия 1 дает следующие правильные результаты:

Total players in my school: 4
Complete the challenge.

Версия 2 работает некорректно:

# Player class
class Player:
    # Complete the implementation
    def __init__(self, ID, name, teamName):
        self.ID = ID
        self.name = name
        self.teamName = teamName

# Team class contains a list of Player
# Objects
class Team:
    # Complete the implementation
    def __init__(self, name, players=[]):
        self.name = name
        self.players = players

    def addPlayer(self, player):
        self.players.append(player)

    def getNumberOfPlayers(self):
        return len(self.players)

# School class contains a list of Team
# objects.
class School:
    def __init__(self, name, teams=[]):
        self.name = name
        self.teams = teams

    def addTeam(self, team):
        self.teams.append(team)

    def getTotalPlayersInSchool(self):
        player_count = 0
        for team in self.teams:
            player_count += team.getNumberOfPlayers()
        return player_count


# Complete the implementation

# code to test the implementation
# remove backticks when you want to test the implemenation of your code

p1 = Player("Harris", 1, "Red");
p2 = Player("Carol", 2, "Red");

p3 = Player("Johnny", 1, "Blue");
p4 = Player("Sarah", 2, "Blue");

red_team=Team("Red Team")
red_team.players.append(p1)
red_team.players.append(p2)

blue_team=Team("Blue Team")
blue_team.players.append(p2)
blue_team.players.append(p3)

mySchool=School("My School")
mySchool.teams.append(red_team)
mySchool.teams.append(blue_team)

print("Total players in my school:", mySchool.getTotalPlayersInSchool())

Версия 2 дает следующие неверные результаты:

Total players in my school: 8
Complete the challenge.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...