Toxotsist

Task C1 (Task D included)

Apr 25th, 2021 (edited)
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.80 KB | None | 0 0
  1. """""
  2. Каждый класс реализовать в отдельном модуле, импортируя их в производные модули.
  3. Создать класс Disk с полями название, жанр, цена. Добавить конструктор класса.                                          COMPLETE
  4.  
  5. Создать производный от Disk класс Audio. Новые поля: исполнитель, студия звукозаписи, список песен (словарь вида        COMPLETE
  6.    название песни: длительность). Определить конструктор, с вызовом родительского конструктора. Определить
  7.    функции добавления новой песни, удаления песни, форматированной печати плейлиста.# Переопределить метод
  8. #    преобразования в строку для печати основной информации (исполнитель, название, жанр,
  9. #    студия звукозаписи, цена).
  10.  
  11. Создать производный от Disk класс DVD. Новые поля: режиссер, кинокомпания, главные роли (словарь вида роль: ФИ актера). COMPLETE
  12.    Определить конструктор, с вызовом родительского конструктора. Определить функции изменения режиссера, добавления,
  13.    удаления и изменения списка главных ролей. Переопределить метод преобразования в строку для печати основной
  14.    информации (режиссер, название фильма, жанр, кинокомпания, цена).
  15. #
  16. Создать класс Store. Поля: название магазина, адрес, коллекция аудиодисков (список экземпляров класса Audio),           IN PROGRESS
  17.    коллекция фильмов (список экземпляров класса DVD). Определить конструктор. Переопределить метод преобразования
  18.    в строку для печати всей информации о магазине (с использованием переопределения в классах Audio и DVD).
  19.  
  20.    Переопределить методы получения количества дисков функцией len, получения диска по индексу, изменения по
  21.    индексу, удаления по индексу (пусть вначале идут индексы аудиодисков, затем фильмов). Переопределить
  22.    операции + и - для добавления или удаления диска. Добавить функцию создания txt-файла и записи всей
  23.    информации в него (в том числе списков песен и главных ролей фильма).
  24.  
  25. Предусмотреть хотя бы в 3 местах обработку возможных исключений.
  26.  
  27. В каждом модуле провести подробное тестирование всех создаваемых объектов и функций.
  28. """
  29. from task_D025 import logger
  30.  
  31. class Disk():
  32.     def __init__(self, title, genre, price):
  33.         self.title = title
  34.         self.genre = genre
  35.         self.price = price
  36.         print("Disk created!")
  37.         logger("CRE", "создание объекта класса Disk")
  38.  
  39. class DVD(Disk):
  40.     def __init__(self, title, genre, price, director, studio, main_cast):
  41.         super().__init__(title, genre, price)
  42.         self.director = director
  43.         self.studio = studio
  44.         self.main_cast = {}
  45.         print('Type: DVD')
  46.         logger("CRE", "создание объекта класса DVD")
  47.  
  48.     def add_director(self, direct):
  49.         self.director = direct
  50.         logger("INF", "Добавляем режиссёра")
  51.  
  52.     def edit_main_cast(self, cast, name):
  53.         self.main_cast.update({cast: name})
  54.         logger("INF", "Изменяем роли")
  55.  
  56.     def __delitem__(self, key):
  57.         self.main_cast.pop(key)
  58.         print('Роль удалена')
  59.         logger("INF", "Удаляем роль")
  60.  
  61.     def __str__(self):
  62.         logger("INF", "преобразование в строку объекта класса DVD")
  63.         return "{} - {} Genre: {} Studio: {} Price: {}".format(self.director, self.title, self.genre, self.studio,
  64.                                                                self.price)
  65.  
  66.  
  67. class Audio(Disk):
  68.     def __init__(self, title, genre, price, artist, studio):
  69.         super().__init__(title, genre, price)
  70.         self.artist = artist
  71.         self.studio = studio
  72.         self.duration = 0
  73.         self.songs = {}
  74.         print('Type: Audio')
  75.         logger("CRE", "создание объекта класса Audio")
  76.  
  77.     def add_song(self):
  78.         self.title = input('Введите название песни')
  79.         self.duration = input('Введите длительность')
  80.         self.songs.update({self.title:self.duration})
  81.         print(self.songs)
  82.         logger("INF", "Добавляем песню")
  83.  
  84.     def __delitem__(self, key):
  85.         self.songs.pop(key)
  86.         print('Песня удалена')
  87.         logger("INF", "Удаляем песню")
  88.     def __str__(self):
  89.         logger("INF", "преобразование в строку объекта класса Audio")
  90.         return "{} - {} Genre: {} Studio: {} Price: {}".format(self.artist, self.title, self.studio, self.genre,
  91.                                                                self.price)
  92. class Store(Audio, DVD):
  93.     def __init__(self, name, address):
  94.         self.name = name
  95.         self.address = address
  96.         self.song_list = []
  97.         self.dvd_list = []
  98.         logger("CRE", "создание объекта класса Store")
  99.  
  100.     def __str__(self):
  101.         logger("INF", "преобразование в строку объекта класса Store")
  102.         res = str()
  103.         for i in self.song_list:
  104.             res += str(i)
  105.         for i in self.dvd_list:
  106.             res += str(i)
  107.         return "{} (Улица {}) : {}".format(self.name, self.address, res)
  108.  
  109.     def __len__(self):
  110.         try:
  111.             logger("INF", "Измеряем количество дисков в магазине")
  112.             return len(self.song_list)+len(self.dvd_list)
  113.         except TypeError:
  114.             print('Net Diskov')
  115.  
  116.     def __getitem__(self, item):
  117.         logger("INF", "Достаём диск из магазина")
  118.         if isinstance(item, Audio):
  119.             return self.dvd_list[item]
  120.  
  121.         if isinstance(item, DVD):
  122.             return self.song_list[item]
  123.  
  124.     def __setitem__(self, index, disk):
  125.         logger("INF", "Пихаем диск в магазин")
  126.         if isinstance(disk, Audio):
  127.             if len(self.song_list) != 0:
  128.                 self.song_list[index] = disk
  129.             else:
  130.                 self.song_list.append(disk)
  131.  
  132.         if isinstance(disk, DVD):
  133.             if len(self.dvd_list) != 0:
  134.                 self.dvd_list[index] = disk
  135.             else:
  136.                 self.dvd_list.append(disk)
  137.  
  138.     def __delitem__(self, key):
  139.         logger("INF", "Удаляем диск из магазина")
  140.         if len(self.song_list)>=key:
  141.             del self.song_list[key]
  142.         else:
  143.             del self.dvd_list[key]
  144.  
  145.     def __iadd__(self, other):
  146.         logger("INF", "Добавляем диск через плюс")
  147.         if isinstance(other, Audio):
  148.             self.song_list.append(other)
  149.         if isinstance(other, DVD):
  150.             self.dvd_list.append(other)
  151.  
  152.     def __sub__(self, other):
  153.         logger("INF", "Удаляем диск через минус")
  154.         if isinstance(other, Audio):
  155.             self.song_list.pop(self.song_list.index(other))
  156.  
  157.         if isinstance(other, DVD):
  158.             self.dvd_list.pop(self.dvd_list.index(other))
  159.  
  160.     def toTXT(self):
  161.         logger("INF", "Пихаем всю информацию в файл")
  162.         f = open('store.txt', 'w')
  163.         f.write(str(self))
  164.         f.close()
  165.         print('TXT создан')
  166.  
  167.  
  168. store1 = Store("THE STORE", "Pushkina, Dom 2")
  169. disk1 = DVD("Bruh", "Comedy", 100, "Ivan", "Сinema", "asd")
  170. print(len(store1))
  171. disk2 = Audio('Personal Jesus', 'Indie', 125, 'Depeche Mode', 'DF')
  172. # disk2.add_song()
  173. print(disk2)
  174. store1[0] = disk1
  175. print(len(store1))
  176. store1.toTXT()
  177. '''
  178.  
  179.  
  180. '''
Add Comment
Please, Sign In to add comment