2017-07-17 188 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()方法中,我得到一個錯誤信息告訴我的列表裏沒有屬性。不知道需要添加什麼來解決這個問題。

PS我只編程了幾個月,所以我道歉,如果該解決方案是顯而易見的

回答

0

當你正在處理類,你有你的實例變量(如self.city = city)和您類變量(如roster = [])。

實例變量綁定到類的一個實例。所以如果你創建了2個SportsTeam對象,它們每個都有自己的city

類變量有點不同。他們不與班級的一個實例綁在一起;也就是說,無論您創建了多少個對象,只會有一個roster變量。

對我來說,roster是一個類變量似乎有點奇怪,因爲每個SportsTeam應該有它自己的roster。但是,如果您需要爲您的CSI課程使用班級變量,也許您可​​以保留all_teams和/或all_players的列表。

考慮到這點:

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 

如果你想保持roster爲類變量,發表評論,我可以幫你調整代碼以適應這一點。