Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def singleton(cls):
- instances = {}
- def getinstance(*args, **kwargs):
- if cls not in instances:
- instances[cls] = cls(*args, **kwargs)
- return instances[cls]
- return getinstance
- @singleton
- class Restaurant():
- def __init__(self, max_waiters = 100, max_managers = 1, max_cleaners = 100, worktime = ('00:00', '24:00'), tables = [], waiters = [], manager = [], cleaners = [], menu = []):
- self.open_time, self.close_time = worktime
- self.tables = tables
- self.max_employees = {'waiters' : max_waiters, 'manager' : max_managers, 'cleaners' : max_cleaners }
- self.menu = menu
- self.workers = {'waiters' : waiters, 'manager' : manager, 'cleaners' : cleaners }
- self.is_open = False
- def open_close(self):
- """ Изменяет состояние ресторана: если ресторан открыт, закрывает его, и наоборот"""
- self.is_open = not self.is_open
- def add_dish(self, dish):
- """Добавляет блюда в меню"""
- self.menu.append(dish)
- def remove_dish(self, dish):
- """Убирает блюдо из меню"""
- self.menu.remove(dish)
- def change_dish(self, dish, char_to_change, new_val):
- """Изменяет значение заданной характеристики блюда"""
- dish.change(char_to_change, new_val)
- def __repr__(self):
- return ', '.join('{} : {}'.format(key, val) for key, val in vars(self).items())
- class Dish():
- def __init__(self, name, ingredients, price):
- self.name = name
- self.ingredients = ingredients
- self.price = price
- def change(self, char_to_change, new_val):
- vars(self)[char_to_change] = new_val
- class Employee():
- def __init__(self, salary = 100, workhours = ('00:00', '24:00'), position = 'waiter'):
- self.salary = salary
- self.workhours = workhours
- self.position = position
- def get_fired(self, position, restaurant, one_to_fire = None):
- """Удаляет работника из списка служащих и из списка глобальных имен"""
- otf = self if not one_to_fire else one_to_fire
- restaurant.workers[position].remove(otf)
- for k in globals():
- if globals()[k] == otf:
- del globals()[k]
- break
- class Waiter(Employee):
- def __init__(self, tip, table):
- self.tip = tip
- self.table = table
- def wait_a_table(number_of_table, order):
- print("Обслужить столик под номером" + number_of_table + "с заказом" + order)
- return wait_a_table
- class Chef(Employee):
- def __init__(self, dish):
- self.dish = dish
- def cook_a_dish(self, type_of_dish):
- for i in menu:
- if i in menu:
- print("Приготовить" + type_of_dish)
- else:
- print("У нас нет такого блюда")
- class Table():
- def __init__(self, number_of_table, names_of_guests, orders, status):
- self.number_of_table = number_of_table
- self.names_of_guests = names_of_guests
- self.orders = orders
- self.status = False
- def free_taken(self):
- """Статус стола: занят или свободен"""
- self.is_free = not self.is_free
- #tests
- a = Restaurant()
- b = Restaurant()
- print(a == b)
- d = Dish('soup', ['water', 'potato'], 10)
- a.add_dish(d)
- a.change_dish(d,'name','msoup')
- print (d.name)
- print([dish.name for dish in b.menu])
- a.remove_dish(d)
- print(a)
- class Manager(Employee):
- def hire(self, position, restaurant, worker):
- """Функция найма работника. Если вакансии есть, персонаж добавляется в список работников, иначе выводится сообщение о невозможности найма"""
- if len(restaurant.workers[position]) == restaurant.max_employees[position]:
- print('Cannot hire one more worker')
- return
- restaurant.workers[position].append(worker)
- def fire(self, position, restaurant, one_to_fire):
- Employee.get_fired(self, position, restaurant, one_to_fire)
- def wait_waiter_a_table(name_of_waiter, number_of_table):
- self.name_of_waiter = name_of_waiter
- self.number_of_table = number_of_table
- print("Обслужить столик под номером" + number_of_table + "официанту с именем" + name_of_waiter)
- return wait_waiter_a_table
- def make_a_reservation(status, names_of_guests, time):
- self.names_of_guests = names_of_guests
- self.time = time
- if status==self.is_free:
- print ("Стол под номером" + number_of_table + "зарезервирован на имя" + names_of_guests + "на время" + time)
- else:
- print ("Стол занят")
- return make_a_reservation
- class Housemaid(Employee):
- def __init__(self, place):
- self.place = place
- def tidy(self, place):
- for i in restaurant_zones:
- if i in restaurant_zones:
- print("Убраться в" + place)
- else:
- print("В этой зоне уборка не входит в обязанности уборщицы")
- class Guest():
- def __init__(self, number_of_guest):
- self.number_of_guest = number_of_guest
- m = Manager()
- c = Employee()
- m.hire('cleaners', a, c)
- print (a.workers)
- m.fire('cleaners', a, c)
- print (a.workers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement