Code Generator | Python
Armor and GhostInArmor Classes in Python
This task involves creating two Python classes: Armor for managing armor parts and GhostInArmor, a subclass that adds a knight's name. Both classes feature methods for adding, displaying parts, and manipulating armor quantities effectively.
Prompt
Answer
Описание задачегия классов Armor и GhostInArmor на Python
В данной задаче мы создадим два класса на языке Python: Armor
, который управляет частями доспехов, и его наследник GhostInArmor
, который расширяет функциональность, добавляя имя рыцаря. Каждый класс будет содержать необходимые методы и операции, как это описано в задаче.
Класс Armor
Описание
Класс Armor
инициируется с кортежевыми аргументами, представляющими части доспехов и их количества. Он поддерживает методы добавления, представления в виде строки, а также возвращает количество уникальных частей.
Методы класса Armor
- add: добавляет часть доспеха.
__repr__
: возвращает строковое представление объекта.
Класс GhostInArmor
Описание
GhostInArmor
наследует от Armor
и добавляет именованный аргумент для имени рыцаря. Он предоставляет дополнительные функциональности для получения, удаления и перебора частей доспехов.
Методы класса GhostInArmor
- getitem: позволяет получать количество доспеха по названию.
- del: удаляет часть доспеха.
- objects: перебирает и возвращает названия частей.
- items: возвращает отсортированный список кортежей частей и их количества.
__repr__
: возвращает строковое представление объекта.
Реализация классов
class Armor:
def __init__(self, *args):
"""
Инициализация класса Armor.
:param args: произвольное количество кортежей с частями доспехов и их количеством
"""
self.parts = {}
for part, count in args:
self.parts[part] = count
def add(self, key):
"""
Добавление части доспеха.
:param key: название добавляемой части доспеха
"""
if key in self.parts:
self.parts[key] += 1 # Увеличиваем количество, если часть существует
else:
self.parts[key] = 1 # Инициализируем часть с количеством 1
def __repr__(self):
"""
Строковое представление объекта Armor.
:return: строка с частями и их количеством
"""
if not self.parts:
return "Armor()"
sorted_parts = sorted(self.parts.items())
return "Armor(" + ', '.join(f"('{part}', {count})" for part, count in sorted_parts) + ")"
class GhostInArmor(Armor):
def __init__(self, *args, name="Canterville"):
"""
Инициализация класса GhostInArmor.
:param args: произвольное количество кортежей с частями доспехов и их количеством
:param name: имя рыцаря
"""
super().__init__(*args)
self.name = name
def __getitem__(self, key):
"""
Получение количества части доспеха по названию.
:param key: название части доспеха
:return: количество доспеха или None, если нет такой части
"""
return self.parts.get(key, None)
def __delitem__(self, key):
"""
Удаление части доспеха.
:param key: название части доспеха
"""
if key in self.parts:
del self.parts[key]
def __iter__(self):
"""
Перебор названий частей доспехов.
:return: итератор по названиям частей доспехов
"""
return iter(self.parts)
def items(self):
"""
Получение отсортированного списка кортежей (часть, количество).
:return: отсортированный список кортежей
"""
return sorted(self.parts.items())
def __len__(self):
"""
Получение количества уникальных частей доспехов.
:return: количество уникальных частей
"""
return len(self.parts)
def __repr__(self):
"""
Строковое представление объекта GhostInArmor.
:return: строка с частями и именем рыцаря
"""
if not self.parts:
return f"GhostInArmor(name='{self.name}')"
sorted_parts = sorted(self.parts.items())
return "GhostInArmor(" + ', '.join(f"('{part}', {count})" for part, count in sorted_parts) + f", name='{self.name}')"
# Пример использования
if __name__ == "__main__":
ar = Armor(("helmet", 1), ("glove", 2))
ar.add("bib")
print(ar) # Armor(('bib', 1), ('glove', 2), ('helmet', 1))
# Печать пустой доспехи
print(Armor()) # Armor()
gia = GhostInArmor(("knee pad", 2), ("handlebar", 1), ("shoe", 1), name="Ghost")
print(gia) # GhostInArmor(('handlebar', 1), ('knee pad', 2), ('shoe', 1), name='Ghost')
Заключение
В данном решении мы реализовали два класса с необходимыми методами, позволяющими управлять частями доспехов, а также расширили функциональность для класса-наследника. Эти классы идеально подходят для задач по управлению доспехами внутри игры или другой программной среды.
Description
This task involves creating two Python classes: Armor for managing armor parts and GhostInArmor, a subclass that adds a knight's name. Both classes feature methods for adding, displaying parts, and manipulating armor quantities effectively.