Помогите с ООП пожалуйста python
Создать классы Cat, Dog и Chicken. Для каждого класса создать метод
get_sound и атрибут name.
При обращении к атрибуту name должна возвращаться строка,
содержащая кличку питомца.
При вызове метода get_sound в зависимости от класса в консоль должен
выводиться следующий текст:
«мяю» - для Cat,
«гав-гав» - для Dog,
«чик-чик» - для Chicken.
Создайте список Animals, содержащий не менее 3х экземпляров каждого
класса. Затем создайте цикл, в котором у каждого элемента списка будет
выведен на экран атрибут name и вызван метод get_sound.
Для каждого класса создать метод add_friend, при вызове данного
метода, ему должен аргументом передаться любой объект. Переданный объект
должен расширить список «друзей» экземпляра класса, являющимся
атрибутом friends.
В методе add_friend должна осуществляться проверка добавляемого
объекта. Каждый класс может иметь в «друзьях» не более 2х типов объектов и
не более пяти экземпляров в общей сумме. То есть, для класса должны быть
определены два типа объектов, которых можно добавить в список, и суммарно
в этом списке может быть не более пяти элементов.
Реализовать метод «список друзей» для каждого класса: на экран
выводится имя каждого элемента списка или сообщение о пустоте списка.
Совсем нет фантазии у «педагогов» — из года в год одно и то же, собачки гавкают у них..
Вот вариант актуальный и военный:
# Базовый класс
class Warship:
def __init__(self, name):
self.name = name # Имя корабля
self.squad_members = [] # Список членов эскадры
def add_friend(self, friend):
allowed_types = self.allowed_squad_types()
if type(friend) not in allowed_types:
print(f"{self.name}: нельзя добавить {type(friend).__name__} в эскадру.")
return
if len(self.squad_members) >= 5:
print(f"{self.name}: эскадра уже полна.")
return
self.squad_members.append(friend)
print(f"{self.name}: добавлен {friend.name} в эскадру.")
def show_squad_members(self):
if not self.squad_members:
print(f"{self.name}: эскадра пуста.")
else:
print(f"{self.name}: члены эскадры:")
for member in self.squad_members:
print(f" - {member.name}")
def allowed_squad_types(self):
return []
def get_weapon(self):
raise NotImplementedError("Метод должен быть переопределён в подклассе")
# Класс Крейсер
class Cruiser(Warship):
def get_weapon(self):
print(f"{self.name}: применяет крылатые ракеты 'Tomahawk'.")
def allowed_squad_types(self):
return [Destroyer, Carrier]
# Класс Эсминец
class Destroyer(Warship):
def get_weapon(self):
print(f"{self.name}: применяет торпеды Mk 48 и ракеты 'Standard Missile-2'.")
def allowed_squad_types(self):
return [Cruiser, Destroyer]
# Класс Авианосец
class Carrier(Warship):
def get_weapon(self):
print(f"{self.name}: выпускает истребители F/A-18 Super Hornet.")
def allowed_squad_types(self):
return [Destroyer, Carrier]
# Список имён (примеры названий американских кораблей)
cruiser_names = ["Ticonderoga", "Bunker Hill", "Chancellorsville"]
destroyer_names = ["Arleigh Burke", "Spruance", "Zumwalt"]
carrier_names = ["Nimitz", "Enterprise", "Ford"]
# Создание списка кораблей
fleet = []
for name in cruiser_names:
fleet.append(Cruiser(name))
for name in destroyer_names:
fleet.append(Destroyer(name))
for name in carrier_names:
fleet.append(Carrier(name))
# Вывод информации по флоту
print("=== ФЛОТ ===")
for ship in fleet:
print(f"Корабль: {ship.name}")
ship.get_weapon()
print()
# Пример добавления членов эскадры
print("=== ДОБАВЛЕНИЕ ЧЛЕНОВ ЭСКАДРЫ ===")
fleet[0].add_friend(fleet[3]) # Крейсер Ticonderoga добавляет эсминец Arleigh Burke
fleet[0].add_friend(fleet[6]) # Крейсер Ticonderoga добавляет авианосец Nimitz
fleet[0].add_friend(fleet[7]) # Превышение — не добавляется
fleet[6].add_friend(fleet[3]) # Авианосец добавляет эсминец
# Показ состава эскадр
print("\n=== СОСТАВ ЭСКАДР ===")
for ship in fleet:
ship.show_squad_members()