我对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]
< -----这是我感到困惑的地方,因为这不起作用
答案 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}}类。这取决于你我将要用它做什么。