【问题标题】:I have instance of some Event and ticket-instances to that event how can i add all created ticket-instances to event instance list我有一些事件的实例和该事件的票证实例如何将所有创建的票证实例添加到事件实例列表
【发布时间】:2020-10-27 15:37:47
【问题描述】:

我有活动和票务课程(我认为学生、迟到、高级等票的类型在这个问题上无关紧要,它们只是改变票的价格。

所以我希望 Event 类型的实例将 Ticket 类型的所有实例附加到它的门票列表中

class Event:

def __init__(self, event_date=datetime.today().date()):
    self.event_date = event_date
    self.today = datetime.today().date()
    self.tickets = []

def buy_ticket(self, student=False):
    if student and (self.event_date - self.today).days >= 10:
        return StudentTicket()
    elif (self.event_date - self.today).days < 10:
        return LateTicket()
    elif (self.event_date - self.today).days >= 60:
        return AdvancedTicket()
    else:
        return Ticket()

class Ticket:
def __init__(self):
    self.price = 100
    self.number = uuid.uuid4()

def __str__(self):
    return f'Number: {self.number}\nType: {self.__class__.__name__}\nPrice: {self.price}\n'

所以例如我这样做:

ev = Event(datetime(2020, 11, 28).date())

t1 = ev.buy_ticket()
t2 = ev.buy_ticket()

print(t1) 'Number: cadd3d01-245d-46ab-85e2-f044ff92ba9f
           Type: Ticket
           Price: 100'
print(t2) 'Number: 2d8a6738-4c0e-41cd-9b71-565bf90b6bc3
           Type: Ticket
           Price: 100'

print(ev.tickets)# Should print sth like this: 
               '[<__main__.Ticket object at 0x10CD3820>, <__main__.Ticket object at 0x10CD37C0>]'
for i in ev.tickets:
    print(i)# Should print:
            'Number: cadd3d01-245d-46ab-85e2-f044ff92ba9f
             Type: Ticket
             Price: 100'

            'Number: 2d8a6738-4c0e-41cd-9b71-565bf90b6bc3
             Type: Ticket
             Price: 100'

我从 ev(t1, t2) 创建的每个票证实例都必须添加到 ev.tickets。找不到任何信息如何实现它。

【问题讨论】:

  • 在 ev.buy_ticket() 中,您执行 self.tickets.append(whatever you return in buy_ticket()) 并在 Event.__init__(...) 上初始化 self.tickets
  • 请修复您的IndentationErrors

标签: python oop inheritance


【解决方案1】:

您应该在Event.buy_ticket 中创建它们时附加Ticket

class Event:

    def __init__(self, event_date=datetime.today().date()):
        self.event_date = event_date
        self.today = datetime.today().date()
        self.tickets = []

    def buy_ticket(self, student=False):
        ticket = None
        if student and (self.event_date - self.today).days >= 10:
            ticket = StudentTicket()
        elif (self.event_date - self.today).days < 10:
            ticket = LateTicket()
        elif (self.event_date - self.today).days >= 60:
            ticket = AdvancedTicket()
        else:
            ticket = Ticket()
        self.tickets.add(ticket) # add created ticked to your Event instance
        return ticket

【讨论】:

    【解决方案2】:

    您需要做的就是在您的列表中使用append 方法将新创建的刻度添加到您的刻度列表的末尾,然后再返回它。像这样的:

    def buy_ticket(self, student=False):
        if student and (self.event_date - self.today).days >= 10:
            t = StudentTicket()
        elif (self.event_date - self.today).days < 10:
            t = LateTicket()
        elif (self.event_date - self.today).days >= 60:
            t = AdvancedTicket()
        else:
            t = Ticket()
    
        self.tickets.append(t)
        return t
    

    您的问题是您所做的只是创建票证,而您实际上从未与票证列表进行过交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2011-04-05
      • 2012-03-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多