Как встроить класс в список? - PullRequest
0 голосов
/ 27 мая 2018

В настоящее время я строю проект, который позволяет симулировать игру Magic The Gathering, чтобы я мог видеть, как часто я беру определенные карты и сколько времени требуется, чтобы выиграть матч - то есть сократить жизнь противника с 20 до 0Код, который я использую сейчас, использует ООП для отдельных карт и отдельных колод.Они импортируются в основной фрагмент кода - проект находится на GitHub по адресу https://github.com/jimbob88/MTG. Card.py:

class Card:
    """Define MTG Card"""

    def __init__(self, name, cc, supertype):
        """(Card, int, str) -> Nonetype"""
        self.name = name; self.cc = cc; self.supertype = supertype
        self.cardData = [self.name, self.cc, self.supertype]

    def __str__(self):

        card_string = super().__str__()

        return str(self.cardData)

Это простой класс, который хранит имя, стоимость приведения и типкарты.Он также содержит переменную - cardData - которая возвращает список с именем, стоимостью приведения и супертипом.Затем эти карты вводятся в виде списка в класс с именем Deck.Deck.py:

from random import shuffle;  import csv
class Deck:
    """Define MTG Deck"""

    def __init__(self, name, author, colour, cards):
        self.name = name; self.author = author; self.colour = colour; self.cards = cards
        self.hand = []; self.csvData = []

Класс Deck, который помещает этот список в переменную - self.cards.Колода также содержит переменные для названия колоды, автора колоды и цвета колоды.Наконец, у меня есть мой основной скрипт с именем MTG.py, который создает колоду, а не запускает ее - вот область, где я столкнулся с проблемой.MTG.py:

from Deck import *; from Card import * 
dcards = []         
while True:
    #if input('End?') != 'end':
    #    continue
    #else:
    #    break
    userCardName = input('Card Name: ')
    userCC = input('Converted Mana Cost(INT): ')
    userSuperType = input('Card SuperType: ')
    userAmount = input('Amount: ')
    dcards.extend([[Card(userCardName, userCC, userSuperType).cardData(), userAmount]])
    print(str(dcards))
    end = input('End? ')
    if end == 'y':
        break
RedBurn = Deck('RedBurn','James Blackburn', 'Red',dcards)

Этот код имеет бесконечный цикл, который запрашивает у пользователей имя карты, стоимость разыгрыша, Супертип и количество этих карт.Затем он вводит это в класс - Card (userCardName, userCC, userSuperType) - в списке с cardData.Затем он продолжает повторять этот процесс, пока цикл не будет разорван.После этого он помещает все полученные пользователем данные в класс Deck. Моя задача - следующий этап разработки - разрешить раздачу карт и основные правила, которые к этому применяются.По сути, каждый ход можно разыгрывать только одну землю, и если я хочу разыграть, например, существо, мне нужно выбрать тип земли.Таким образом, чтобы использовать тип земли, его нельзя использовать снова.До следующего хода.Моя идея исправить это состояла в том, чтобы вводить каждую карту как объект, а не как список, чтобы у меня была отдельная переменная self.variable внутри этого объекта с именем isTapped.

dcards.extend([[Card(userCardName, userCC, userSuperType), userAmount]])

Хотя это приводит к отображению картыas - <Card.Card object at 0x7f8dad97f630> - выделение памяти не соответствует фактическому значению.Кто-нибудь знает, как я могу это сделать, любая помощь в других частях кода будет признателен, заранее спасибо, Джеймс Блэкберн.

1 Ответ

0 голосов
/ 27 мая 2018

Если вы распечатываете список карт, сам список будет печатать его элементы, используя repr () этого элемента, а не str ():

# no __str__ 
class One():
    def __init__(self):
        pass

# self-styled __str__
class Two():
    def __init__(self):
        pass
    def __str__(self):
        return "TwoClass: Stylish aint it?"
    def __repr__(self):
        return "REPR of TwoClass: Stylish aint it?"

# Test: print both class instances    
k = [ One(), Two(), [Two()]]  # obj , obj, [obj] inside - see output for what print uses

print(*k,sep="\n\n")

Выход:

<__main__.One object at 0x7fdf5df7a438>

TwoClass: Stylish aint it?

[Repr of TwoClass: Stylish aint it?]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...