面向对象编程入门:用武侠角色理解 Python 中的“类”

在学习 Python 编程时,经常会听到“类”(class)这个概念。对于刚接触编程的新生来说,这听起来可能有点抽象。本文将用一个轻松有趣的例子——武侠人物,来帮助理解“类”是什么、它有哪些组成部分,以及如何用它创建自己的角色并让他们“打一架”。


什么是“类”?

可以把“类”想象成一个模板蓝图。比如,要批量制作“武侠人物”,就需要先设计一个通用的角色模板,规定所有角色都应该有姓名、内力、血量等基本属性,以及攻击、防御、修炼等行为。这个模板就是“类”。

一旦有了这个模板,就可以根据它创建具体的“对象”(也叫“实例”),比如段誉、虚竹,甚至用你自己和同学的名字什么的。


定义一个武侠角色类

下面用 Python 写一个简单的 WuxiaRole 类:

class WuxiaRole:    def __init__(self, name, neili=50, hp=100, attack=20, defense=10, skill="普通攻击"):        # 属性:角色的基本信息        self.name = name       # 姓名        self.neili = neili     # 内力        self.hp = hp           # 血量        self.attack = attack   # 攻击力        self.defense = defense # 防御力        self.skill = skill     # 必杀技名称
    def practice(self):        # 行为:修炼武功,提升内力和攻击力        self.neili += 10        self.attack += 5        print(f"{self.name}修炼成功!内力+10,攻击力+5")
    def show_status(self):        # 行为:显示当前状态        print(f"【{self.name}】血量:{self.hp} 内力:{self.neili} 攻击:{self.attack} 防御:{self.defense}")

解释一下:

__init__ 是初始化方法,每次创建新角色时自动调用。•self.xxx 是角色的属性(数据)。•practice() 和 show_status() 是角色的方法(行为/函数)。


创建具体角色:段誉和虚竹

现在可以用这个模板创建两个经典角色:

duanyu = WuxiaRole("段誉", neili=80, hp=120, attack=25, defense=15, skill="六脉神剑")xuzhu = WuxiaRole("虚竹", neili=90, hp=130, attack=22, defense=20, skill="天山折梅手")

他们各自拥有不同的初始数值,但都遵循同一个模板。

可以让他们修炼一下:

duanyu.practice()  # 段誉修炼xuzhu.practice()   # 虚竹修炼

也可以查看他们的状态:

duanyu.show_status()xuzhu.show_status()

让角色对战:张三 vs 李四

接下来,定义一个独立的函数 fight(role1, role2),让两个角色进行对战。规则很简单:

•双方轮流攻击;•每次攻击造成的伤害 = 攻击方攻击力 - 防御方防御力(最低为1);•血量降到0或以下就倒下;•先出手的是第一个传入的角色。

def fight(role1, role2):    print(f"\n⚔️ 对战开始:{role1.name} vs {role2.name} ⚔️\n")
    round_num = 1    while role1.hp > 0 and role2.hp > 0:        print(f"--- 第 {round_num} 回合 ---")
        # role1 攻击 role2        damage1 = max(1, role1.attack - role2.defense)        role2.hp -= damage1        print(f"{role1.name} 使用 {role1.skill},对 {role2.name} 造成 {damage1} 点伤害!")
        if role2.hp <= 0:            print(f"\n🎉 {role1.name} 获胜!")            break
        # role2 攻击 role1        damage2 = max(1, role2.attack - role1.defense)        role1.hp -= damage2        print(f"{role2.name} 使用 {role2.skill},对 {role1.name} 造成 {damage2} 点伤害!")
        if role1.hp <= 0:            print(f"\n🎉 {role2.name} 获胜!")            break
        round_num += 1        print()  # 空一行,更清晰

现在创建两个新角色,并让他们打一场:

zhangsan = WuxiaRole("法外狂徒张三", neili=60, hp=110, attack=30, defense=8, skill="街头霸王拳")lisi = WuxiaRole("西装革履李四", neili=40, hp=90, attack=25, defense=12, skill="PPT暗器术")
fight(zhangsan, lisi)

运行后,会看到两人你来我往,直到一方血量归零!


简单总结

类(class) 是创建对象的模板。•属性(如 name、hp) 描述对象的状态。•方法(如 practice、show_status) 描述对象能做什么。•通过类可以轻松创建多个具有相同结构但不同数据的角色。•函数可以操作这些对象,实现互动(比如对战)。

这种“把数据和操作封装在一起”的思想,就是面向对象编程(OOP) 的核心。掌握它,就能写出更清晰、更易维护的代码。

但实际上面向对象的更多进阶玩法还要看继承和多态等等,这些方面以后学C++或者Java就能接触更多了,Python里面这回就先不说这些了。

预览时标签不可点

Close

更多

Name cleared

微信扫一扫赞赏作者

Like the AuthorOther Amount

赞赏后展示我的头像

作品

暂无作品

Like the Author

Other Amount

¥

最低赞赏 ¥0

OK

Back

Other Amount

更多

赞赏金额

¥

最低赞赏 ¥0

1

2

3

4

5

6

7

8

9

0

.

Python语言程序设计 · 目录

Python语言程序设计

上一篇数值积分漫谈:如何让用Python求积分?下一篇Windows 系统下从清华大学 TUNA 镜像安装 Miniconda3 完整指南

Close

更多

搜索「」网络结果

Close

调整当前正文文字大小

更多

100%