1

我对python相当陌生。我试图定义一个类,然后我想从一个文件创建一个实例,然后引用它的特定部分,但似乎不能。这是 Python 3.3.0

这里是课堂......

class Teams():

    def __init__(self, ID = None, Team = None, R = None, W = None, L = None):
        self._items = [ [] for i in range(5) ]
        self.Count = 0


    def addTeam(self, ID, Team, R=None, W = 0, L = 0):
        self._items[0].append(ID)
        self._items[1].append(Team)
        self._items[2].append(R)
        self._items[3].append(W)
        self._items[4].append(L)
        self.Count += 1

    def addTeamsFromFile(self, filename):
        inputFile = open(filename, 'r')
        for line in inputFile:
            words = line.split(',')
            self.addTeam(words[0], words[1], words[2], words[3], words[4])

    def __len__(self):
        return self.Count

这是 Main 中的代码

startFileName = 'file_test.txt'
filename = startFileName

###########
myTestData = Teams()

myTestData.addTeamsFromFile(startFileName)

文件中的样本数据

100,AAAA,106,5,0
200,BBBB,88,3,2
300,CCCC,45,1,4
400,DDDD,67,3,2
500,EEEE,90,4,1

我想我在这里很好(不是 100% 肯定),但现在我如何参考这些数据来查看......我没有正确创建类吗?如何查看一个实例是否大于另一个实例...

即,myTestData[2][2] > myTestData[3][2]<-----这是我感到困惑的地方,因为这不起作用

4

2 回答 2

1

你为什么不创建一个这样的Team类:

class Team():
    def __init__(self, ID, Team, R=None, W = 0, L = 0)
      # set up fields here

然后在Teams

class Teams():
   def __init__(self):
       self._teams = []
   def addTeam (self, ID, Team, R=None, W = 0, L = 0)
       team = Team (ID, Team, R=None, W = 0, L = 0)
       self._teams.append (team)

现在,如果我做对了,您想覆盖>操作员的行为。

要做到这一点超载__gt__(self, other) [链接]

所以会是

class Team ():
   # init code from above for Team

    def __gt__ (self, otherTeam):
        return self.ID > otherTeam.ID # for example

还要确保将这些字符串转换为数字,因为您比较的是字符串而不是数字。为此使用int功能。

于 2012-12-09T15:43:17.717 回答
0

您遇到的直接问题是您访问团队数据的代码没有说明您的myTestData价值是对象而不是列表。您可以通过以下方式修复它:

myTestData._items[2][2] > myTestData._items[3][2]

不过,如果你打算做那么多,我建议重命名_items为显然应该公开的东西。您可能还想让该addTeamsFromFile方法在将其读取的某些值传递给addTeam方法之前将其转换为整数(而不是将它们保留为字符串)。

另一种方法是让您的Teams班级支持直接成员访问。您可以通过创建一个名为的方法来做到这一点__getitem____setitem__如果您希望能够直接分配值)。就像是:

def __getitem__(self, index):
    return self._items[index]

@Aleksandar 关于为团队数据项创建课程的答案也是一个很好的答案。事实上,为单个团队创建一个类可能比一个包含多个团队的类更有用。您可以用实例列表替换Teams该类。Team我猜这取决于你要用它做什么。

于 2012-12-09T16:18:54.410 回答