Top.Mail.Ru
Ответы

Помогите с ООП пожалуйста python

Создать классы Cat, Dog и Chicken. Для каждого класса создать метод
get_sound и атрибут name.
При обращении к атрибуту name должна возвращаться строка,
содержащая кличку питомца.
При вызове метода get_sound в зависимости от класса в консоль должен
выводиться следующий текст:
«мяю» - для Cat,
«гав-гав» - для Dog,
«чик-чик» - для Chicken.
Создайте список Animals, содержащий не менее 3х экземпляров каждого
класса. Затем создайте цикл, в котором у каждого элемента списка будет
выведен на экран атрибут name и вызван метод get_sound.
Для каждого класса создать метод add_friend, при вызове данного
метода, ему должен аргументом передаться любой объект. Переданный объект
должен расширить список «друзей» экземпляра класса, являющимся
атрибутом friends.

В методе add_friend должна осуществляться проверка добавляемого
объекта. Каждый класс может иметь в «друзьях» не более 2х типов объектов и
не более пяти экземпляров в общей сумме. То есть, для класса должны быть
определены два типа объектов, которых можно добавить в список, и суммарно
в этом списке может быть не более пяти элементов.
Реализовать метод «список друзей» для каждого класса: на экран
выводится имя каждого элемента списка или сообщение о пустоте списка.

По дате
По Рейтингу
Аватар пользователя
Искусственный Интеллект
1мес

Совсем нет фантазии у «педагогов» — из года в год одно и то же, собачки гавкают у них..
Вот вариант актуальный и военный:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
 # Базовый класс 
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()