跳到主要内容

Python 面向对象实战:从零封装一个扑克牌 Card 类

在学习面向对象编程时,很多同学对“类”“实例化”“特殊方法”这些概念感到抽象。今天我们就用一个最贴近生活的例子——扑克牌,来把类的定义、初始化方法 __init__ 和字符串输出方法 __str__ 一次讲透。

整篇教程遵循一条完整链路:明确目标 → 定义类 → 实例化测试 → 优化输出 → 结果验证 → 小结。跟着做一遍,你就能掌握 Python 类的基本写法。


一、目标:一张扑克牌需要描述什么?​

一张扑克牌,核心特征只有两个:

特征说明示例
花色(suit)牌属于哪一门花色黑桃、红桃、方块、梅花
面值(rank)牌的点数或字母A、3、7、9、J、Q、K

所以我们要设计的 Card 类,只需要包含这两个属性。为了让创建对象时就能把花色和面值传进去,我们需要一个初始化方法来接收这两个参数。


二、代码实现:定义 Card 类与初始化方法​

新建一个 Card 类,并在其中定义初始化方法 __init__,接收 suit 和 rank 两个参数,再分别赋值给实例属性:

class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank

这里的关键点:

  • __init__ 是 Python 的特殊方法,在实例化对象时会自动调用,不需要手动执行。
  • self.suit 和 self.rank 是绑定在对象身上的属性,每个对象各有一份。

三、测试:实例化两张牌并打印​

类写好了,接下来验证它是否能正常工作。我们实例化两张牌:一张“黑桃 A”,一张“红桃 3”,然后直接打印对象看看输出什么。

card1 = Card("♠", "A")
card2 = Card("♥", "3")

print(card1)
print(card2)

运行后会发现,控制台输出的是类似 <__main__.Card object at 0x...> 的内容——一个对象类型加一串内存地址。

直接打印 Card 对象,输出对象类型和内存地址,可读性很差

问题很明显:这种输出对使用者极不友好,两张牌打印出来长得差不多,根本分不清哪张是黑桃 A、哪张是红桃 3。

定义 str 方法后,print 输出花色加面值,结果清晰可读


四、优化:用 __str__ 让输出变得可读​

解决办法是给类再加一个特殊方法 __str__。当使用 print() 打印对象时,Python 会自动调用这个方法,并把它的返回值作为输出内容。

我们把花色和面值拼接后返回:

class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank

def __str__(self):
return self.suit + self.rank

再次运行同样的测试代码,输出就变成了 ♠A 和 ♥3,一眼就能看懂。

image-20261028151612686


五、结果验证:完整代码与输出​

把最终版本完整写出来,方便你直接复制运行:

class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank

def __str__(self):
return self.suit + self.rank


card1 = Card("♠", "A")
card2 = Card("♥", "3")

print(card1)
print(card2)

输出结果:

♠A
♥3

可以看到:实例化时传入的花色和面值,被正确保存到了对象属性中;print 时又通过 __str__ 自动拼接输出,整个流程闭环完成。

Card 类完整代码及两张牌的最终打印结果


六、小结​

本篇通过一个扑克牌的例子,掌握了面向对象中两个最常用的特殊方法:

  1. __init__ 初始化方法:在创建对象时自动调用,用于接收参数并初始化实例属性。本例中接收花色 suit 和面值 rank。
  2. __str__ 字符串输出方法:在使用 print() 打印对象时自动调用,返回一个可读性更好的字符串。本例中返回“花色 + 面值”。

这两个方法是后续构建更复杂类(比如整副牌、发牌逻辑)的基础。建议你动手把代码敲一遍,并尝试修改花色和面值,观察输出变化,加深理解。

后续可扩展方向(视频未涉及,供练习参考):可以继续设计一个 Deck 类来管理 52 张牌,并实现洗牌、发牌等方法,把今天的 Card 类真正用起来。

课程推荐

想系统学习这门课程?

你已阅读完本文。需要更完整的知识体系,可以继续了解「Vibe Coding 实战课程」。

查看课程详情