Я работаю над своим первым проектом, не связанным со школой, и я немного озадачен тем, как мне поступить с чем-то.Проект написан на Python, но я думаю, что сам вопрос более концептуален / основан на ООП.Цель проекта - создать приложение, которое принимает данные для колоды MtG из 40 карт и отображает некоторые вероятностные показатели, основанные на содержимом колоды.Используя API Scryfall, я создал текстовый документ, который содержит информацию о карте для набора магических карт.Текстовый документ - это просто набор строк, каждая из которых содержит словарь формата JSON, и у меня есть вся необходимая информация в текстовом файле.Это выглядит примерно так:
{ 'name' : 'card_1_name', 'attribute1' : ' card_1_attribute1', 'attribute2' : 'card_1_attribute2', 'etc' : 'etc'}
{ 'name' : 'card_2_name', 'attribute1' : ' card_2_attribute1', 'attribute2' : 'card_2_attribute2', 'etc' : 'etc'}
{ 'name' : 'card_3_name', 'attribute1' : ' card_3_attribute1', 'attribute2' : 'card_3_attribute2', 'etc' : 'etc'}
Для тех, кто знаком с MtG, подумайте:
{'name' : 'lightning bolt', 'color' : 'red', 'type' : 'instant', ...., 'etc' : 'etc'}
Это продолжается примерно для 250 различных карт.Я могу прочитать документ, чтобы получить любую информацию о любой карточке, которую я хочу, хотя, поскольку форматирование странное, я должен использовать цикл for, который читает каждую строку отдельно и преобразует ее в настоящий словарь Python, используя ast.literal_eval, чтобы идентифицировать строкуон содержит словарь с «именем» нужной мне карты.
Вот что я сейчас пытаюсь сделать.Я подумал, что мог бы создать «карту» класса, которая имеет атрибуты, которые есть у каждой магической карты, такие как имя и цвет.Затем я хочу создать подклассы класса «карта», которые содержат другие атрибуты, специфичные для определенных типов карт, например, тип карты в MtG - «существо».Только существа имеют атрибут «сила» и «выносливость».Таким образом, класс «существо» будет наследовать основные атрибуты от «карты», а также иметь свои собственные специальные атрибуты.
Я считаю, что колода карт должна представлять собой список объектов карты.Моя проблема в том, что мне трудно автоматизировать процесс создания карточных объектов.Это класс 'card', который у меня есть на данный момент:
class magic_card:
def __init__(self, card_dict): # card_dict is the dictionary that contains the card data
self.name = card_dict['name']
self.cmc = card_dict['cmc']
self.colors = card_dict['colors']
self.rarity = card_dict['rarity']
Как мне автоматизировать процесс создания этих ~ 250 объектов карты, чтобы имя 'card' было именем экземпляра карты?Я имею в виду, что хочу создать цикл, который делает это:
f = open("document_that_holds_card_information.txt", "r")
for i in range(1, 251):
card_dictionary = ast.literal_eval(f.readline())
card_name = (card_dictionary['name'])
card_name = magic_card(card_dictionary) # I want this magic_card instance's name to be the value stored in card_dictionary['name']
f.close()
Это выполнимо?Или я обдумываю вещи?Моя другая мысль - я мог бы просто переформатировать свой текстовый документ, чтобы его было легче искать, отформатировав его так:
['card_name1' : {#dictionary contents}, 'card_name2' : {#dictionary contents}, 'card_name3' : {#dictionary contents}....]
Я действительно борюсь с этим и чувствую, что могу быть туннелемна плохой подход.Пожалуйста, помогите!
Редактировать: Хорошо, консенсус, кажется, что я обдумываю это.Я решил переформатировать файл, содержащий данные моей карты, в соответствующий формат JSON вместо нескольких строк JSON.Вместо того, чтобы колода карт была списком карточных объектов, колода карт была бы списком карточных словарей