python как получить доступ к переменной из другого класса - PullRequest
1 голос
/ 29 сентября 2019

Это снова я.Я хочу получить доступ к переменной deck из class Deck в class Table в методе howManyCards.Другими словами, я создаю колоду карт и хочу сделать метод, который позволит мне взять num первых карт из списка колод, и я не знаю, как правильно написать это.Линия self.onTheTable = Deck.deck[:num] не работает.У меня есть ошибка AttributeError: type object 'Deck' has no attribute 'deck', которую я понимаю, но я не знаю, как это исправить правильно.Спасибо.

class Card:
    def __init__(self, figure, colour):
        self.colour = colour
        self.figure = figure
    def __repr__(self):
        return str(self.figure) + str(self.colour)

class Deck:
    def __init__(self):
        self.deck = []
    def createDeck(self):
        for colour in ["h", "d", "c", "s"]:
            for figure in ["2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"]:
                self.deck.append(Card(figure, colour))

class Table():
    def __init__(self):
        self.onTheTable = []
    def howManyCards(self, num):
       self.onTheTable = Deck.deck[:num]

deck = Deck()
deck.createDeck()
table = Table()
table.howManyCards(10)

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Вам нужно два изменения:

def howManyCards(self, deck, num):
   self.onTheTable = deck.deck[:num]

table.howManyCards(deck, 10)

Проблема с вашим исходным кодом (Deck.deck[:num]) в том, что вы воспринимаете deck какпеременная класса.deck является переменной экземпляра.

0 голосов
/ 29 сентября 2019

Как указывал MobileBen, вы не обращаетесь к объекту Deck.

Вы можете использовать защищенные имена переменных и @property декораторы, чтобы предоставить открытый доступ только для чтения внутренних переменных.

Вы также можете передать Deckэкземпляр, используемый с этим объектом Table во время инициализации класса.

class Deck:
    def __init__(self):
        self._deck = []    # Protected member starting with _

    def createDeck(self):
        for colour in ["h", "d", "c", "s"]:
            for figure in ["2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"]:
                self._deck.append(Card(figure, colour))

    @property
    def deck(self):
        return self._deck


class Table():
    def __init__(self, deck):
        self._onTheTable = []
        self._deck = deck

    def howManyCards(self, num):
       self._onTheTable = self._deck.deck[:num]

    @property
    def onTheTable(self):
       return self._onTheTable

deck = Deck()
deck.createDeck()
table = Table(deck)
table.howManyCards(10)

print(table.onTheTable)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...