【发布时间】:2021-12-29 03:02:26
【问题描述】:
所以我尝试采用 OOP 方法来制作一副由卡片类和卡片组类组成的卡片组。
我有一个 .csv 文件,其中包含每张卡片(52 张卡片)的 2 列(花色和等级)。
suit,rank
Spades,2
Spades,3
Spades,4...
这是Card 类的简单版本,用于在Deck 类中创建卡片的每个实例。
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
self.name = f"{self.rank} of {self.suit}"
对于我的甲板类的__init__ 部分,我有几个循环打开.csv 文件并将每个实例附加到Deck 类的空列表self.cards 中。
import csv
from cards import Card
cards_csv = "C/:path...."
class Deck:
def __init__(self):
self.cards = []
with open(cards_csv, "r") as f:
reader = csv.DictReader(f)
deck = list(reader)
for card in deck:
card = Card(
suit=str(card.get("suit")),
rank=str(card.get("rank"))
)
self.cards.append(card.name)
我想知道它是否更优化,以及是否有办法将这些循环分配到 @classmethod。我知道@classmethod 会调用__init__,但是否可以反过来呢?即
class Deck:
def __init__(self):
self.cards = []
self.create_deck()
@classmethod
def create_deck(cls):
with open(cards_csv, "r") as f:
reader = csv.DictReader(f)
deck = list(reader)
for card in deck:
card = Card(
suit=str(card.get("suit")),
rank=str(card.get("rank"))
)
cls.append(card.name)
【问题讨论】:
标签: python-3.x oop inheritance class-method load-csv