Наследование позволяет создавать новые классы на основе существующих, расширяя их функциональность и переиспользуя код.
# Базовый класс
class Weapon:
def __init__(self, name: str, base_atk: int, substat: str):
self.name = name
self.base_atk = base_atk
self.substat = substat
self.level = 1
self.refinement = 1
def refine(self) -> None:
"""Улучшение оружия"""
if self.refinement < 5:
self.refinement += 1
print(f"{self.name} улучшено до R{self.refinement}")
# Класс-наследник
class Bow(Weapon):
def __init__(self, name: str, base_atk: int, substat: str):
# Вызов конструктора родителя
super().__init__(name, base_atk, substat)
self.weapon_type = "Лук"
def charge_shot(self) -> float:
"""Урон заряженной атаки"""
return self.base_atk * (1.5 + 0.1 * self.refinement)
# Базовый класс персонажа
class Character:
def __init__(self, name: str, element: str):
self.name = name
self.element = element
def elemental_skill(self) -> str:
"""Базовая реализация навыка"""
return "Использует элементальный навык"
def elemental_burst(self) -> str:
"""Базовая реализация взрыва стихии"""
return "Использует взрыв стихии"
# Конкретные реализации персонажей
class Venti(Character):
def __init__(self):
super().__init__("Венти", "Анемо")
def elemental_skill(self) -> str:
return "Использует Небесную поэзию"
def elemental_burst(self) -> str:
return "Использует Великую оду ветру"
class Zhongli(Character):
def __init__(self):
super().__init__("Чжун Ли", "Гео")
def elemental_skill(self) -> str:
return "Создает Нефритовый щит"
def elemental_burst(self) -> str:
return "Вызывает Планету Упадка"
# Полиморфное использование
def use_abilities(character: Character) -> None:
"""Функция работает с любым персонажем"""
print(f"{character.name}:")
print(character.elemental_skill())
print(character.elemental_burst())
Создайте систему классов для разных типов оружия в Genshin Impact:
Подсказка: Пример взаимодействия с классами:
# Пример создания оружия
skyward = Bow("Небесное крыло", 674, "Крит шанс")
# Пример улучшения
skyward.refine()
# Пример расчета урона
normal_damage = skyward.calculate_damage()
charged_damage = skyward.charge_shot()