#python #oop
#питон #ооп
Вопрос:
Я работаю над домашним заданием, с которого мы начали ООП, и я не совсем уверен в этом.
Допустим, у меня есть X экземпляров класса Card, где Card является родительским классом для других подклассов, таких как type of the cards и т.д., Но в целом все они сохранены в переменных «экземплярах», например, 20 экземпляров. Что мне нужно, так это перенести 10 таких экземпляров в другой класс с именем Deck, где я создам новый список «deck» и добавлю в него эти 10 карт, после чего разделю их пополам на 2 игрока.
Моя проблема в том, что я просто не знаю, как переместить эти экземпляры с карты класса в колоду класса, а также разделить их послесловия для этих двух игроков. Спасибо за вашу помощь, надеюсь, я ясно выразился.
class Card:
instances = []
def __init__(self, name):
self.__name = name
self.__class__.instances.append(self)
class Deck:
deck = []
def __init__(self):
self.__class__.deck.append(Card.instances)
class Player(Deck):
def __init__(self, name, deck):
super().__init__(deck)
self.__name = name
def main():
card1 = Card('Card1')
card2 = Card('Card2')
card3 = Card('Card3')
p1 = Player('Tim')
p2 = Player('Jill')
if __name__ == '__main__':
main()
Комментарии:
1. Способ, которым здесь реализована колода, представляет собой список всех карт, поэтому вы никогда не сможете иметь две разные колоды.
2. Хорошо, спасибо. Итак, как это сделать?
3. Я не уверен, что вам даже нужен
Deck
класс. Похоже, что простой список карточек будет работать нормально.4. Кроме того, почему вы наследуете класс Player от класса Deck? Это означает, что игрок — это колода, что кажется странным. Я думаю, имеет смысл сказать, что у игрока есть колода (т. Е. композиция), а не то, что игрок является колодой (т. Е. наследование).
5. Хорошо, но в любом случае. Если у меня будет этот список, как я собираюсь разделить его для этих двух игроков?
Ответ №1:
Итак, прежде всего, вы реализовали Deck
так, чтобы он содержал список всех Cards
. Вам понадобится init
колода только с ее именем (и, возможно, несколько начальных карт), а затем методы в этом классе для добавления и удаления любых других карт. Для этого вы можете использовать приведенный ниже код:
class Deck:
def __init__(self, init_cards=None):
self.deck = []
if init_cards:
self.deck.extend(init_cards)
def add_card(self, card):
self.deck.append(card)
def withdraw_card(self, card_name):
return_card = None
for card in self.deck:
if card.name == card_name:
return_card = self.deck.remove(card)
return return_card
Затем вы можете создавать колоды с их картами и передавать карты между колодами, используя функции в Deck
классе. Дайте каждому игроку колоду в качестве переменной, а затем ссылайтесь на нее.
Комментарии:
1.
__init__
наверное , хочет позвонить.extend(init_cards)
, а не.append(init_cards)
.