Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """""
- Каждый класс реализовать в отдельном модуле, импортируя их в производные модули.
- Создать класс Disk с полями название, жанр, цена. Добавить конструктор класса. COMPLETE
- Создать производный от Disk класс Audio. Новые поля: исполнитель, студия звукозаписи, список песен (словарь вида COMPLETE
- название песни: длительность). Определить конструктор, с вызовом родительского конструктора. Определить
- функции добавления новой песни, удаления песни, форматированной печати плейлиста.# Переопределить метод
- # преобразования в строку для печати основной информации (исполнитель, название, жанр,
- # студия звукозаписи, цена).
- Создать производный от Disk класс DVD. Новые поля: режиссер, кинокомпания, главные роли (словарь вида роль: ФИ актера). COMPLETE
- Определить конструктор, с вызовом родительского конструктора. Определить функции изменения режиссера, добавления,
- удаления и изменения списка главных ролей. Переопределить метод преобразования в строку для печати основной
- информации (режиссер, название фильма, жанр, кинокомпания, цена).
- #
- Создать класс Store. Поля: название магазина, адрес, коллекция аудиодисков (список экземпляров класса Audio), IN PROGRESS
- коллекция фильмов (список экземпляров класса DVD). Определить конструктор. Переопределить метод преобразования
- в строку для печати всей информации о магазине (с использованием переопределения в классах Audio и DVD).
- Переопределить методы получения количества дисков функцией len, получения диска по индексу, изменения по
- индексу, удаления по индексу (пусть вначале идут индексы аудиодисков, затем фильмов). Переопределить
- операции + и - для добавления или удаления диска. Добавить функцию создания txt-файла и записи всей
- информации в него (в том числе списков песен и главных ролей фильма).
- Предусмотреть хотя бы в 3 местах обработку возможных исключений.
- В каждом модуле провести подробное тестирование всех создаваемых объектов и функций.
- """
- from task_D025 import logger
- class Disk():
- def __init__(self, title, genre, price):
- self.title = title
- self.genre = genre
- self.price = price
- print("Disk created!")
- logger("CRE", "создание объекта класса Disk")
- class DVD(Disk):
- def __init__(self, title, genre, price, director, studio, main_cast):
- super().__init__(title, genre, price)
- self.director = director
- self.studio = studio
- self.main_cast = {}
- print('Type: DVD')
- logger("CRE", "создание объекта класса DVD")
- def add_director(self, direct):
- self.director = direct
- logger("INF", "Добавляем режиссёра")
- def edit_main_cast(self, cast, name):
- self.main_cast.update({cast: name})
- logger("INF", "Изменяем роли")
- def __delitem__(self, key):
- self.main_cast.pop(key)
- print('Роль удалена')
- logger("INF", "Удаляем роль")
- def __str__(self):
- logger("INF", "преобразование в строку объекта класса DVD")
- return "{} - {} Genre: {} Studio: {} Price: {}".format(self.director, self.title, self.genre, self.studio,
- self.price)
- class Audio(Disk):
- def __init__(self, title, genre, price, artist, studio):
- super().__init__(title, genre, price)
- self.artist = artist
- self.studio = studio
- self.duration = 0
- self.songs = {}
- print('Type: Audio')
- logger("CRE", "создание объекта класса Audio")
- def add_song(self):
- self.title = input('Введите название песни')
- self.duration = input('Введите длительность')
- self.songs.update({self.title:self.duration})
- print(self.songs)
- logger("INF", "Добавляем песню")
- def __delitem__(self, key):
- self.songs.pop(key)
- print('Песня удалена')
- logger("INF", "Удаляем песню")
- def __str__(self):
- logger("INF", "преобразование в строку объекта класса Audio")
- return "{} - {} Genre: {} Studio: {} Price: {}".format(self.artist, self.title, self.studio, self.genre,
- self.price)
- class Store(Audio, DVD):
- def __init__(self, name, address):
- self.name = name
- self.address = address
- self.song_list = []
- self.dvd_list = []
- logger("CRE", "создание объекта класса Store")
- def __str__(self):
- logger("INF", "преобразование в строку объекта класса Store")
- res = str()
- for i in self.song_list:
- res += str(i)
- for i in self.dvd_list:
- res += str(i)
- return "{} (Улица {}) : {}".format(self.name, self.address, res)
- def __len__(self):
- try:
- logger("INF", "Измеряем количество дисков в магазине")
- return len(self.song_list)+len(self.dvd_list)
- except TypeError:
- print('Net Diskov')
- def __getitem__(self, item):
- logger("INF", "Достаём диск из магазина")
- if isinstance(item, Audio):
- return self.dvd_list[item]
- if isinstance(item, DVD):
- return self.song_list[item]
- def __setitem__(self, index, disk):
- logger("INF", "Пихаем диск в магазин")
- if isinstance(disk, Audio):
- if len(self.song_list) != 0:
- self.song_list[index] = disk
- else:
- self.song_list.append(disk)
- if isinstance(disk, DVD):
- if len(self.dvd_list) != 0:
- self.dvd_list[index] = disk
- else:
- self.dvd_list.append(disk)
- def __delitem__(self, key):
- logger("INF", "Удаляем диск из магазина")
- if len(self.song_list)>=key:
- del self.song_list[key]
- else:
- del self.dvd_list[key]
- def __iadd__(self, other):
- logger("INF", "Добавляем диск через плюс")
- if isinstance(other, Audio):
- self.song_list.append(other)
- if isinstance(other, DVD):
- self.dvd_list.append(other)
- def __sub__(self, other):
- logger("INF", "Удаляем диск через минус")
- if isinstance(other, Audio):
- self.song_list.pop(self.song_list.index(other))
- if isinstance(other, DVD):
- self.dvd_list.pop(self.dvd_list.index(other))
- def toTXT(self):
- logger("INF", "Пихаем всю информацию в файл")
- f = open('store.txt', 'w')
- f.write(str(self))
- f.close()
- print('TXT создан')
- store1 = Store("THE STORE", "Pushkina, Dom 2")
- disk1 = DVD("Bruh", "Comedy", 100, "Ivan", "Сinema", "asd")
- print(len(store1))
- disk2 = Audio('Personal Jesus', 'Indie', 125, 'Depeche Mode', 'DF')
- # disk2.add_song()
- print(disk2)
- store1[0] = disk1
- print(len(store1))
- store1.toTXT()
- '''
- '''
Add Comment
Please, Sign In to add comment