所以我正在尝试采用 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 文件并将每个实例附加到类的空列表self.cards
中Deck
。
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__
,但可以反过来做吗?IE
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)