2016-11-20 67 views
0

我試圖傳遞另一個對象的類中的對象實例的列表。當我直接這樣做時 - 一切正常。當他們通過列表包裝在一個元組中時,它不起作用。 Сomparing輸出:將對象的實例列表從另一個類傳遞給該方法

報告

記錄:無,無,無

實錄:E001,IPTV和遠程信息處理,在11月20日:一切都是傷心

記錄:E002,DPI,無

對於報告1

(在0x7f7b88d65908 < .Record對象>,在0x7f7b88d65940 < .Record對象>,< 在0x7f7b88d65978 .Record對象>)

這怎麼可能?以及如何解決它?

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) 
相關問題