如何在 Python 中调试 OOP 类/方法

Jac*_*b H 6 python oop

我正在尝试构建一个程序来模拟纸牌游戏的规范教学编程练习。这是我有多远:

 class Card:

     def __init__(self, suit, rank):
         self.suit = suit
         self.rank = rank
         self.card = str(self.suit) + " " + str(self.rank)

 class Deck:

     def __init__(self):
         self.deck = []

     def Deck_Maker(self):
         ranks = range(1, 11) + ["J", "Q", "K", "A"]
         suits = ["Club", "Heart", "Spade", "Diamond"]

         return self.deck.append(Card(suits[0], ranks[0]))
Run Code Online (Sandbox Code Playgroud)

显然我还没有完成,我必须遍历套装和等级来构建套牌。但是,在继续之前,我想检查一下我是否走上正轨。为此,我想在调用 Deck_Maker 方法后打印结果。我试图用下面的代码来做到这一点......

 def __str__(self):
         d = self.deck
         d2 = d.Deck_Maker()
         return str(d2)
Run Code Online (Sandbox Code Playgroud)

不幸的是,print(Deck().Deck_Maker())返回None.

我究竟做错了什么?更一般地说,程序员如何在创建类和方法时在它们内部闲逛?

谢谢!

Zac*_*ber 5

列表上的 append 方法返回 None 所以这是预期的。尝试拆分您的线路:

deck = Deck()
deck.Deck_Maker()
print(deck)
Run Code Online (Sandbox Code Playgroud)

或将方法 Deck_Maker 更改为:

def Deck_Maker(self):
    ranks = range(1, 11) + ["J", "Q", "K", "A"]
    suits = ["Club", "Heart", "Spade", "Diamond"]
    self.deck.append(Card(suits[0], ranks[0]))
    return self
Run Code Online (Sandbox Code Playgroud)

编辑:您的str方法中也存在问题。当您将 d 设置为 self.deck 时,您将其设置为一个列表。该列表对 Deck_Maker 方法一无所知。尝试更改为下面的方法。这会将您的列表变成一个字符串。为了使其更具可读性,您可能还想向 card 类添加一个 str 方法。

def __str__(self):
    return str(self.deck)
Run Code Online (Sandbox Code Playgroud)