2017-07-17 14 views
0

私はCSIクラスのOOPプロジェクトに取り組んでいます。さまざまなスポーツチームとアスリートオブジェクトを作成しなければならないだけでなく、選手を選手に追加するためのメソッドaddPlayer()も必要です。これは私がこれまで持っていたものです。 addPlayer()メソッドの作成方法。 (Python 3)

class Athlete: 

def __init__(self, name, number): 
    self.name = name 
    self.number = number 

def __str__(self): 
    return "Athlete(" + self.name + ", " + self.number + ")" 

def name(self): 
    return self.name 

def number(self): 
    return self.number 

from Athlete import * 

class SportsTeam: 

    roster = [] 

    def __init__(self, city, name, colors): 
     self.city = city 
     self.name = name 
     self.colors = colors 
     SportsTeam.roster = roster 

    def __str__(self): 
     return "SportsTeam(" + self.city + ", " + self.name + \ 
       ", " + str(self.colors) + ", " + ")" 

    def getcity(self): 
     return self.city 

    def getname(self): 
     return self.name 

    def getcolors(self): 
     return self.colors 

    def getRoster(self): 
     return SportsTeam.roster 

    def printRoster(self): 
     for player in roster: 
      print("Current Team Roster: " + str(SportsTeam.roster)) 

    def addPlayer(self, player): 
     SportsTeam.roster.append(player) 
     return SportsTeam.roster 

私は、私が作成したaddPlayer()メソッドを使用しようとするものである

は、私はそのリストには何の属性を持っていない私に告げるエラーメッセージが表示されます。これを修正するために何を追加する必要があるのか​​分かりません。私は数ヶ月のカップルのためのプログラミングされているので、私は解決策が明らかな場合は、クラスを扱っているとき

答えて

0

、あなたはインスタンス変数self.city = cityなど)あなたのクラスを持って謝罪

PS変数roster = []など)。

インスタンス変数は、クラスのインスタンスに関連付けられています。したがって、2つのオブジェクトを作成する場合は、cityがそれぞれあります。

クラス変数は少し異なります。クラスのインスタンスには結び付けられていません。つまり、何個のオブジェクトを作成しても、rosterという変数が1つしかありません。

私には、rosterはそれぞれSportsTeamに独自のrosterが含まれている必要があるため、クラス変数であると少し奇妙なようです。ただし、CSIクラスのクラス変数を使用する必要がある場合は、all_teamsおよび/またはall_playersのリストを保持することもできます。

これを考慮:あなたは、クラス変数としてrosterを維持したいコメントを残して、私はあなたがこれに対処するためのコードを調整することができます場合は

class SportsTeam: 

    all_teams = [] 
    all_players = [] 

    def __init__(self, city, name, colors): 
     self.city = city 
     self.name = name 
     self.colors = colors 
     self.roster = [] 

     SportsTeam.all_teams.append(self) 

    def __str__(self): 
     return "SportsTeam(" + self.city + ", " + self.name + ", " + str(self.colors) + ")" 

    def getCity(self): 
     return self.city 

    def getName(self): 
     return self.name 

    def getColors(self): 
     return self.colors 

    def getRoster(self): 
     return self.roster 

    def printRoster(self): 
     # the for loop was unnecessary 
     print("Current Team Roster:", str(self.roster)) 

    def addPlayer(self, player): 
     SportsTeam.all_players.append(player) 
     self.roster.append(player) 
     return self.roster 

関連する問題