2016-09-28 5 views
0

Я пытаюсь автоматически создать следующий список:Автоматическое создание списка

[Slot('1A', '0', 0), Slot('2A', '0', 0), 
Slot('1B', '0', 0], Slot ('2B,'0', 0), ....] 

Определяя слот как:

class Slot: 
    def __init__(self, address , card, stat): 
     self.address = address 
     self.card = card 
     self.stat = stat 


board = [] 
for i in range(1, 13): 
    for j in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']: 
     board.append(Slot ((str(i)+j,'0', 0))) 
print(board) 

Использование Python 3.5 в Windows. Что не так? Как я могу это сделать? Благодарю.

+0

Так что же не так :-)? Какой результат и что с ним не так? – Kasramvd

+0

Я очень склонен редактировать 'TypeError' там, но не совсем уверен, что это правильное действие. –

+0

Джим ответил очень полезно. Благодарю. – Yossi7

ответ

2

Вы вложили все аргументы в Slot в одну круглую скобку, передав тем самым один аргумент __init__, который ожидает, что три (и подняли намеки на это). Удалите ненужный набор круглых скобок:

board.append(Slot(str(i)+j,'0', 0)) 

и он отлично работает.

В качестве дополнения, print(board) будет возвращать довольно неприятный вид объектов, я предложил бы перегружать __str__ и __repr__, чтобы получить лучшее представление о созданных объектах:

class Slot: 
    def __init__(self, address , card, stat): 
     self.address = address 
     self.card = card 
     self.stat = stat 

    def __str__(self): 
     return "Slot: ({0}, {1}, {2})".format(self.address, self.card, self.stat) 

    def __repr__(self): 
     return str(self) 

Теперь print(board) печатает:

print(board) 
[Slot: (1A, 0, 0), Slot: (1B, 0, 0),..., Slot: (12H, 0, 0), Slot: (12I, 0, 0)] 
0

Вы передаете один кортеж конструктору. Если вы удалите круглые скобки, ваш код будет золотым.

From: 
board.append(Slot ((str(i)+j,'0', 0))) 
To: 
board.append(Slot(str(i)+j,'0', 0)) 
Смежные вопросы