Как создать родительский класс для 2 типов ошибок и затем вернуть количество друзей без маски в данной задаче?
Задача такая:
Реализуйте класс Cafe, экземпляры которого имеют одно имя атрибута. Напишите метод visit_cafe с одним параметром, посетитель типа dict. Из-за пандемии не все могут посетить кафе. Если у посетителя нет прививочного ключа, значит, он не привит. В этом случае метод должен вызвать исключение NotVaccinatedError.
Проверяйте дату вакцины, если просрочена, возбудите исключение OutdatedVaccineError.
Проверьте в маске ли посетитель, если нет, возбудите исключение NotWearingMaskError
Проверьте сразу список посетителей функцией go_to_cafe, если вакцины нет или прострочена, выполните инструкцию return f"All friends should be vaccinated"
Используйте следующую структуру проекта: errors.py, cafe.py, main.py
Два вопроса:
Как создать родительский класс VaccineError для ошибок NotVaccinatedError и OutdatedVaccineError?
Если все привиты, но кто-то не носит маски, как вернуть сообщение «Друзья должны купить {masks_to_buy} масок», где masks_to_buy — это количество друзей, у которых нет маски.
Мое решение ниже.
Модуль errors:
class VaccineError(Exception):
pass
class NotVaccinatedError(VaccineError):
pass
class OutdatedVaccineError(VaccineError):
pass
class NotWearingMaskError(Exception):
pass
Модуль cafe
import datetime
from errors import NotVaccinatedError, OutdatedVaccineError, NotWearingMaskError
class Cafe:
def __init__(self, name):
self.name = name
def visit_cafe(self, visitor):
self.visitor = visitor
if "vaccine" not in self.visitor:
raise NotVaccinatedError
elif visitor["vaccine"]["expiration_date"] < datetime.date.today():
raise OutdatedVaccineError
elif not visitor["wearing_a_mask"]:
raise NotWearingMaskError
else:
return f"Welcome to {self.name}"
Модуль main
def go_to_cafe(friends, cafe):
masks_to_buy = 0
for i, person in enumerate(friends, 1):
print(masks_to_buy)
try:
if cafe.visit_cafe(person):
if i == len(friends):
print(f"Friends can go to {cafe.name}")
return f"Friends can go to {cafe.name}"
except (VaccineError):
print(f"All friends should be vaccinated")
return f"All friends should be vaccinated"
except (NotWearingMaskError):
masks_to_buy += 1
print(f"Friends should buy {masks_to_buy} masks")
return f"Friends should buy {masks_to_buy} masks"
Приимеры использования:
kfc = Cafe("KFC")
visitor = {
"name": "Paul",
"age": 23,
"vaccine": {
"expiration_date": datetime.date.today()
},
"wearing_a_mask": True
}
kfc.visit_cafe(visitor) # "Welcome to KFC"
friends = [
{
"name": "name1",
"vaccine": {
"expiration_date": datetime.date.today()
},
"wearing_a_mask": True
},
{
"name": "name2",
"vaccine": {
"expiration_date": datetime.date.today()
},
"wearing_a_mask": True
},
]
go_to_cafe(friends, Cafe("KFC")) # "Friends can go to KFC"
friends = [
{
"name": "name1",
"wearing_a_mask": True
},
{
"name": "name2",
"vaccine": {
"expiration_date": datetime.date.today()
},
"wearing_a_mask": True
},
]
go_to_cafe(friends, Cafe("KFC")) # "All friends should be vaccinated"
friends = [
{
"name": "Alisa",
"vaccine": {
"expiration_date": datetime.date.today()
},
"wearing_a_mask": 0
},
{
"name": "Bob",
"vaccine": {
"expiration_date": datetime.date.today()
},
"wearing_a_mask": 1
},
]
go_to_cafe(friends, Cafe("KFC")) # "Friends should buy 2 masks"