【问题标题】:How to create addPlayer() method. (Python 3)如何创建 addPlayer() 方法。 (Python 3)
【发布时间】:2017-12-22 07:27:49
【问题描述】:

我目前正在我的 CSI 课程中处理一个 OOP 项目,在该项目中我必须创建各种运动队和运动员对象以及用于将运动员添加到名册的方法 addPlayer()。这是我目前所拥有的。

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() 方法时,我收到一条错误消息,告诉我列表没有属性。不确定需要添加什么来解决此问题。

P.S 我只编程了几个月,所以如果解决方案很明显,我很抱歉

【问题讨论】:

    标签: python-3.x oop methods attributes


    【解决方案1】:

    当你处理类时,你有你的实例变量(比如self.city = city)和你的类变量(比如roster = [])。

    实例变量与类的实例相关联。因此,如果您创建 2 个SportsTeam 对象,它们每个都有自己的city

    类变量有点不同。它们不依赖于类的实例;也就是说,无论你创建多少个SportsTeam对象,都只会有一个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 保留为类变量,请发表评论,我可以帮助您调整代码以适应此情况。

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 2021-12-13
      • 2017-06-19
      • 2022-06-11
      • 2018-06-15
      • 1970-01-01
      相关资源
      最近更新 更多