将对象实例列表从另一个类传递给该方法

时间:2016-11-20 21:02:59

标签: python-3.x object instance

我正在尝试传递另一个对象的类中的对象实例列表。当我直接这样做 - 一切都按照应有的方式工作。当他们通过列表包含在元组中时,它不起作用。 比较输出:

报告

  

记录:无,无,无

     

记录:E001,IPTV和远程信息处理,11月20日:一切都很悲伤

     

记录:E002,DPI,无

report1

  

     

(< 。记录对象位于0x7f7b88d65908>,< main .Record对象位于0x7f7b88d65940>,< main .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())

1 个答案:

答案 0 :(得分:0)

在第一种情况下,您将Record实例作为单独的参数传递。在这种情况下,args将是一个包含3个参数的元组。

在第二种情况下,您传递了一个参数,一个元组。与第一种情况一样,args将是一个包含给定参数的元组:包含Record实例的元组。

如果您需要传递一个列表(或一个元组),意图将每个列表项解释为一个单独的参数,use * to unpack the list

report1 = Report(*rec1.records)