Я надзвичайно новачок в об'єктно-орієнтованому програмуванні і намагаюся почати вчитися на python, роблячи просту карточну гру (як здається, це традиційно!). Я зробив наступний приклад, який добре працює, і вчить мене робити кілька екземплярів PlayingCard()
класу для створення екземпляра Deck()
класу:
class PlayingCard(object):
def __init__(self, suit, val):
self.suit = suit
self.value = val
def print_card(self):
print("{} of {}".format(self.value, self.suit))
class Deck(object):
def __init__(self):
self.playingcards = []
self.build()
def build(self):
for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
for v in range(1,14):
self.playingcards.append(PlayingCard(s,v))
deck = Deck()
Я хочу зробити щось зараз із більш складними картами, а не просто зі стандартною 52 колодою (яка має приємно зростаючі значення). Колода, яку я маю на увазі, - це картка Monopoly:
Існує 3 основні типи карток - картки ДІЙ, карт ВЛАСНІСТЬ та картки ГРОШІ. Карти дій виконують різні дії, картки власності належать до різних кольорових наборів, а грошові картки можуть мати різні значення. Крім того, картки власності можуть бути "макетками" і можуть використовуватися як частина одного з двох наборів. Нарешті, кожна картка також має еквівалентну вартість грошей (вказана у верхньому куті кожної картки). У картках дій з прокату картка може застосовуватися лише до властивості кольору, зазначеної на картці.
Моє запитання полягає лише в тому, як вирішити подібну ситуацію, і що було б приємним способом включити ці різні картки в програму python на основі класу? Чи повинен я тримати свій єдиний PlayingCard()
клас і просто мати багато входів, таких як PlayingCard(type="PROPERTY", value="3M")
. Або було б краще , щоб створити роздільні класи , такі як ActionPlayingCard()
, PropertyPlayingCard()
і т.д.? Або є кращий спосіб? Як я кажу, я на початку свого навчання тут, і як організувати такі типи ситуацій з точки зору дизайну вищого рівня.
Дуже дякую.