Как создать класс, который использует существующие классы?

#python #class #oop #inheritance

#python #класс #ооп #наследование

Вопрос:

Я написал программу, которая создает меню для ресторанов. В моем коде вы можете видеть, что создано три класса. Теперь я хочу создать класс с именем ‘ThreeCourseMenu’, который использует все эти три существующих класса. В этом классе ‘ThreeCourseMenu’ должно быть гарантировано, что существует не более (или точно) 3 курсов. Как я могу создать этот класс, используя все три других класса?

Вот мой код:

 #class definitions
class MenuCard():
    __date : str
    def __init__(self, date):
        self.__date = date

    def add_course(self):
        pass

    def __str__(self):
        return 'nMenü vom {}n'.format(self.__date)

class Course():
    __name : str
    def __init__(self, name):
        self.__name = name
        self.__dishes = []

    def add_dish(self, dish_name):
        self.__dishes.append(dish_name)

    def __str__(self):
        return '{}'.format(self.__name)
        for i in self.__dishes:
            return i

class Dish(): 
    __name : str
    __veggie : bool
    def __init__(self, name, veggie):
        self.__name = name
        self.__veggie = veggie

    def __str__(self):
        if self.__veggie is True:
            return '{} (veg)'.format(self.__name)
        else:
            return '{}'.format(self.__name)

#creating class instances
MenuDate = MenuCard('10.11.2020')
vorspeise = Course('Vorspeise')
vorspeise_gericht = Dish('Carpaggio vom Rind auf knackigem Blattsalat', False)
vorspeise_gericht2 = Dish('Gemischter Salat mit Dressing nach Tradition', True)

suppe = Course('nSuppe')
suppe_1 = Dish('Rindsuppe mit Beilage nach Wahl', False)

gang_eins = Course('n1. Gang')
gang_speise_1 = Dish('Salat mit Toppings nach Wahl', True)

gang_zwei = Course('n2. Gang')
gang_speise_2 = Dish('Schweinsbraten mit Kartoffelsalat', False)
gang_speise_3 = Dish('Rindersteak mit gebratenem Gemüse', False)
gang_speise_4 = Dish('Wienerschnitzel mit Pommes', False)
gang_speise_5 = Dish('Linsen-Chili mit Reis', True)

nachspeise = Course('nNachspeise')
nachspeise_1 = Dish('Apfelkuchen mit Vanillesauce', True)
nachspeise_2 = Dish('Schokoschnitte mit Schlagsahne', True)

#list for all instances to loop over
gang = [vorspeise, vorspeise_gericht, vorspeise_gericht2, suppe, suppe_1, gang_eins, gang_speise_1, gang_zwei,
        gang_speise_2, gang_speise_3, gang_speise_4, gang_speise_5, nachspeise, nachspeise_1, nachspeise_2]

#output
print(MenuDate.__str__())
for food in gang:
    gang_text = food.__str__()
    print(gang_text)

  

Здесь я попытался создать этот класс, но я не знаю, зачем мне нужны именно эти три класса. Программа возвращает мне ошибку AttributeError, и я не знаю почему. Как я могу решить эту проблему или есть другой способ сделать это?

 class ThreeCourseMenu():
    __menucard : MenuCard
    __course : Course
    __dish : Dish
    def __init__(self):
        pass

    def __str__(self):
        count_courses = 0
        while count_courses <= 3:
            return self.__course
            count_courses  = 1
        if count_courses == 3:
            print("There are exactly 3 courses")
        elif count_courses > 3:
            print("There are more than 3 courses")
        else:
            print("There are not more than 3 courses")        
        
  

Комментарии:

1. Вы пытались решить эту проблему? Если вы это сделали, пожалуйста, включите этот код. Если вы этого не сделали, пожалуйста, попробуйте, а затем повторно отправьте с ошибкой.

2. Да, извините, я забыл написать класс в основном коде. Теперь это доступно для просмотра.

3. Я бы рекомендовал прочитать realpython.com/lessons/class-and-instance-attributes