Python:引用类对象列表列表

时间:2012-12-09 15:23:36

标签: python python-3.x member-access

我对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]< -----这是我感到困惑的地方,因为这不起作用

2 个答案:

答案 0 :(得分: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) [link]

所以它将是

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

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

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

答案 1 :(得分:0)

您遇到的直接问题是,访问团队数据的代码并不会将您的myTestData值视为对象而非列表。您可以通过执行以下操作来解决此问题:

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

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

另一种方法是让您的__getitem__班级支持直接成员访问。您可以通过创建名为__setitem__的方法(如果您希望能够直接指定值def __getitem__(self, index): return self._items[index] )来实现这一点。类似的东西:

Teams

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