2016-11-20 6 views
0

Я пытаюсь передать список экземпляров объектов в классе другого объекта. Когда я делаю это напрямую - все работает так, как должно. Когда они проходят список, он завернут в кортеж, он не работает. Сomparing выходы:Передача списка экземпляров объекта методу из другого класса

для отчет:

Запись: Нет, None, None

Запись: E001, IPTV и телематики, на 20 ноября: все печально

Запись: E002, DPI, None

для доклад1:

None

(< Основной объект .Record на 0x7f7b88d65908>, < главный объект .Record в 0x7f7b88d65940>, < Основной .Record объекта в 0x7f7b88d65978>)

Отсутствует

Как это возможно? И как это исправить?

class Ticket: 
    tickets = [] 
    def __init__(self, id=None, group=None): 
    self.id = id 
    self.group = group 
    self.tickets.append(self) 

class Record(Ticket): 
    records = [] 
    def __init__(self, ticket=None, comment=None): 
    self.ticket = ticket 
    self.comment = comment 
    self.records.append(self) 

    def __str__(self): 
    if self.ticket != None: 
     return 'Record: ' + '{0}, {1}, {2}'.format(self.ticket.id, self.ticket.group, self.comment) 

class Report: 
    def __init__(self, *args): 
    self.records = list(args) 

    def show_all(self): 
    for record in self.records: 
     print(record) 


if __name__ == '__main__': 
    t1 = Ticket('E001', 'IPTV and telematics') 
    t2 = Ticket('E002', 'DPI') 
    rec1 = Record(Ticket()) 
    rec2 = Record(t1, 'at Nov 20: everything is sad') 
    rec3 = Record(t2) 

    report = Report(rec1,rec2,rec3) 
    print(report.show_all()) 

    report1 = Report(tuple(rec1.records)) 
    print(report1.show_all()) 

ответ

0

В первом случае вы передаете экземпляры записи в качестве отдельных параметров. В этом случае args будет кортежем, содержащим 3 аргумента.

Во втором случае вы передаете один параметр, кортеж. Как и в первом случае, args будет кортежем, содержащим приведенные аргументы: кортеж, содержащий экземпляры Record.

Если вам нужно передать список (или кортеж) с намерением, чтобы каждый элемент списка должен быть интерпретирован как отдельный аргумент, use * to unpack the list:

report1 = Report(*rec1.records)