Классы позволяют создавать собственные типы данных, объединяющие свойства (атрибуты) и поведение (методы). В Python всё является объектом и принадлежит какому-либо классу.
class Character:
"""Базовый класс для игрового персонажа"""
def __init__(self, name: str, element: str, weapon: str):
# Атрибуты экземпляра
self.name = name
self.element = element
self.weapon = weapon
self.level = 1
self.hp = 1000
self.atk = 100
def __str__(self) -> str:
"""Строковое представление персонажа"""
return f"{self.name} ({self.element})"
class Character:
def level_up(self, levels: int = 1) -> None:
"""Повышение уровня персонажа"""
self.level += levels
# Увеличение характеристик при повышении уровня
self.hp += levels * 100
self.atk += levels * 10
def is_ready_for_ascension(self) -> bool:
"""Проверка возможности возвышения"""
return self.level in [20, 40, 50, 60, 70, 80]
@property
def stats(self) -> dict:
"""Получение всех характеристик персонажа"""
return {
"HP": self.hp,
"ATK": self.atk,
"Level": self.level
}
# Создание экземпляра класса
venti = Character("Венти", "Анемо", "Лук")
# Использование методов
venti.level_up(20)
print(venti.stats) # Вывод характеристик
# Изменение атрибутов
venti.atk += 100 # Увеличение базовой атаки
# Проверка готовности к возвышению
if venti.is_ready_for_ascension():
print(f"{venti.name} готов к возвышению!")
class Character:
# Атрибуты класса (общие для всех экземпляров)
max_level = 90
valid_elements = ["Пиро", "Гидро", "Анемо", "Электро",
"Дендро", "Крио", "Гео"]
def __init__(self, name: str, element: str, weapon: str):
if element not in self.valid_elements:
raise ValueError(f"Недопустимый элемент: {element}")
self.name = name
self.element = element
def level_up(self, levels: int = 1) -> None:
new_level = self.level + levels
if new_level > self.max_level:
raise ValueError(f"Максимальный уровень: {self.max_level}")
Создайте класс, моделирующий персонажа Genshin Impact. Реализуйте:
Подсказка: Пример структуры класса:
class GenshinCharacter:
valid_elements = [...]
valid_weapons = [...]
def __init__(self, name: str, element: str, weapon: str):
# Проверки и инициализация
@property
def base_damage(self) -> float:
# Расчет базового урона
def validate_stats(self) -> bool:
# Проверка корректности характеристик