Я только начал знакомиться с классами и хочу решить такую задачу: Создать колоду карт, для колоды создать несколько карт с разными атрибутами - все через классы. У колоды должны быть функции: вывести свое содержимое сортируя по группам, по хп, атаке и так далее. Потом можно будет создать еще одну колоду с другими картами и еще что-нибудь придумать. У меня пока только так получилось. Мне кажется, что это неоптимальный вариант, поскольку в том направлении, в котором я начал есть и еще будет много повторения кода и т. п. Я хотел бы понять как устроены классы и как их лучше реализовывать. Мне говорили, что подклассы опциональных и их всегда можно реализовать как-то с наследованием - только я не понимаю как такое сделать наследованием. Поэтому будут ли у вас какие-то советы как лучше такой концепт реализовать?
class Deck():
num_of_cards = 0
group_name = { "Intelegence" : [], "Strength" : [], "Agility" : [] }
def __init__(self, deck_name = "Колода", date = None):
self.deck_name = deck_name
self.date = date
def print_by_group(self):
for key in self.group_name:
print(f"Группа {key}:")
for name in self.group_name[key]:
print(f" {name}")
class Card():
def __init__(self, name, phys_damage, hp):
self.name = name
self.phys_damage = phys_damage
self.hp = hp
Deck.num_of_cards += 1
class CardInt(Card):
group = "Intelegence"
def __init__(self, name, phys_damage, hp, mage_damage):
super().__init__(name, phys_damage, hp)
self.mage_damage = mage_damage
Deck.group_name[self.group].append(self.name)
class CardStr(Card):
group = "Strength"
def __init__(self, name, phys_damage, hp, add_hp):
super().__init__(name, phys_damage, hp)
self.hp = hp + add_hp
Deck.group_name[self.group].append(self.name)
class CardAgl(Card):
group = "Agility"
def __init__(self, name, phys_damage, hp, armor):
super().__init__(name, phys_damage, hp)
self.armor = armor
Deck.group_name[self.group].append(self.name)
my_deck = Deck("Моя колода", "24.05.2022")
# name, phys_damage, hp
techies = my_deck.CardInt("Течис", 32, 600, 100)
earth_spirit = my_deck.CardInt("Земеля", 40, 600, 60)
pudge = my_deck.CardStr("Рудге", 80, 600, 150)
antimage = my_deck.CardAgl("Крип", 60, 600, 10)
my_deck.print_by_group()