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 ответа
Почему бы вам не создать 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
функция для этого.
Непосредственная проблема, с которой вы сталкиваетесь, заключается в том, что ваш код для доступа к данным команды не учитывает ваши myTestData
значение, являющееся объектом, а не списком. Вы можете исправить это, выполнив:
myTestData._items[2][2] > myTestData._items[3][2]
Хотя, если вы планируете делать так много, я бы предложил переименовать _items
к чему-то, что, очевидно, должно быть публичным. Вы также можете сделать addTeamsFromFile
Метод преобразует некоторые значения, которые он читает, в целые числа (а не оставляет их в виде строк) перед передачей их в addTeam
метод.
Альтернативой будет сделать ваш Teams
поддержка класса прямого доступа члена. Вы можете сделать это, создав метод с именем __getitem__
(а также __setitem__
если вы хотите иметь возможность назначать значения напрямую). Что-то вроде:
def __getitem__(self, index):
return self._items[index]
@ Ответ Александра о создании класса для командных данных также хорош. Фактически, может быть более полезным иметь класс для отдельных команд, чем иметь класс, содержащий несколько. Вы могли бы заменить Teams
класс со списком Team
экземпляров. Я думаю, это зависит от того, что ты собираешься делать с этим.