【发布时间】: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