Вопрос по классам / предметам в Python - PullRequest
0 голосов
/ 26 марта 2020
class Franchise:

  def __init__(self, address, menus):
    self.address = address
    #self stands in for the object getting created
    #when we create an object, we call on init
    #when the init constructor gets called, it returns a "Franchise" object
    #self is the object getting returned from the constructor
    #we assign self."address" of the object from the constructor equal to the address that got passed into the ( )
    self.menus = menus

  def __repr__(self):
    return self.address

  def available_menus(self, time):
    available_menu = []
    for menu in self.menus:
      if time >= menu.start_time and time <= menu.end_time:  <---- QUESTION HERE
        #menu.start_time, menu is defined in Class Menu
        available_menu.append(menu)
    return available_menu

class Menu:
  def __init__(self, name, items, start_time, end_time):
    self.name = name
    self.items = items
    self.start_time = start_time
    self.end_time = end_time

  def __repr__(self):
    return self.name + ' menu available from ' + str(self.start_time) + ' to ' + str(self.end_time)

  def calculate_bill(self, purchased_items):
    bill = 0
    for purchased_item in purchased_items:
      if purchased_item in self.items:
        item = self.items.get(purchased_item)
        #another way is:
        #item = self.items[purchased_item]
        bill += item
    return bill


#Brunch Menu
brunch_items = {
  'pancakes': 7.50, 'waffles': 9.00, 'burger': 11.00, 'home fries': 4.50, 'coffee': 1.50, 'espresso': 3.00, 'tea': 1.00, 'mimosa': 10.50, 'orange juice': 3.50
}

brunch_menu = Menu("Brunch", brunch_items, 1100, 1600) 

print(brunch_menu.calculate_bill(['pancakes', 'home fries', 'coffee']))

#print(brunch_menu)

#Early Bird Menu
early_bird_items = {
  'salumeria plate': 8.00, 'salad and breadsticks (serves 2, no refills)': 14.00, 'pizza with quattro formaggi': 9.00, 'duck ragu': 17.50, 'mushroom ravioli (vegan)': 13.50, 'coffee': 1.50, 'espresso': 3.00,
}

early_bird_menu = Menu('Early Bird', early_bird_items, 1500, 1800)

print(early_bird_menu.calculate_bill(['salumeria plate', 'mushroom ravioli (vegan)']))

#Dinner Menu
dinner_items = {
  'crostini with eggplant caponata': 13.00, 'ceaser salad': 16.00, 'pizza with quattro formaggi': 11.00, 'duck ragu': 19.50, 'mushroom ravioli (vegan)': 13.50, 'coffee': 2.00, 'espresso': 3.00,
}

dinner_menu = Menu('Dinner', dinner_items, 1700, 2300)

#Kids Menu
kids_items = {
  'chicken nuggets': 6.50, 'fusilli with wild mushrooms': 12.00, 'apple juice': 3.00
}

kids_menu = Menu('Kids', kids_items, 1100, 2100)

menus = [brunch_menu, early_bird_menu, dinner_menu, kids_menu]

flagship_store = Franchise("1232 West End Road", menus)

new_installment = Franchise("12 East Mulberry Street", menus)

Я начал изучать классы и объекты и немного запутался в отношении приведенного выше кода.

Это было подсказкой: «Давайте расскажем нашим клиентам, что они могут заказать! Предоставьте франшизу метод .available_menus (), который принимает параметр времени и возвращает список объектов Menu, доступных в это время. "

" if time> = menu.start_time и time <= menu.end_time " </p>

Почему нам разрешено использовать menu.start_time и menu.end_time.

Это потому, что мы определили 'class Menu'?

Я немного запутался в том, что почему нам разрешено использовать menu.start_time и menu.end_time, потому что я нигде это не определил.

Например: self.menus было определено в def init (self, address, меню)

Но нигде не определено menu.start_time или menu.end_time.

1 Ответ

1 голос
/ 26 марта 2020

Когда вы создали каждый Franchise, вы дали ему список Menu экземпляров:

<b>menus</b> = [brunch_menu, early_bird_menu, dinner_menu, kids_menu]
flagship_store = Franchise("1232 West End Road", <b>menus</b>)
new_installment = Franchise("12 East Mulberry Street", <b>menus</b>)

Каждый вызов Franchise сохраняет ссылку на этот список меню:

class Franchise:
    def __init__(self, address, <b>menus</b>):
        self.address = address
        <b>self.menus = menus</b>

, чтобы при вызове метода available_menus вы могли выполнять итерацию по этому списку.

def available_menus(self, time):
    available_menu = []
    for <b>menu</b> in self.menus:
        if time >= <b>menu</b>.start_time and time <= <b>menu</b>.end_time:
            available_menu.append(menu)
    return available_menu

, и каждый из этих экземпляров имел свои атрибуты start_time и end_time, определенные при был создан.

class Menu:
    def __init__(self, name, items, <b>start_time, end_time</b>):
        self.name = name
        self.items = items
        <b>self.start_time = start_time
        self.end_time = end_time</b>

    ...

early_bird_menu = Menu('Early Bird', early_bird_items, <b>1500</b>, <b>1800</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...