为什么需要类

把"数据 + 操作数据的函数"打包在一起:

# 没用类:散装
def make_player(name, hp):
    return {"name": name, "hp": hp}

def take_damage(player, dmg):
    player["hp"] -= dmg

p = make_player("WadeLy", 100)
take_damage(p, 30)

# 用类:紧凑
class Player:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def take_damage(self, dmg):
        self.hp -= dmg

p = Player("WadeLy", 100)
p.take_damage(30)

三个关键字

  • class:定义类
  • __init__:构造函数,创建对象时自动调用
  • self:当前对象自身的引用(C++/Java 的 this)

完整例子

class Player:
    def __init__(self, name, hp=100):
        self.name = name        # 实例属性
        self.hp = hp
        self.alive = True

    def take_damage(self, dmg):
        self.hp -= dmg
        if self.hp <= 0:
            self.alive = False
            print(f"{self.name} 倒下了")

    def heal(self, amount):
        if self.alive:
            self.hp = min(100, self.hp + amount)

    def __str__(self):           # 决定 print(p) 显示什么
        return f"<Player {self.name} HP={self.hp}>"


p = Player("WadeLy")
print(p)              # <Player WadeLy HP=100>
p.take_damage(30)
p.heal(10)
print(p.hp)           # 80

实例属性 vs 类属性

class Player:
    max_hp = 100              # 类属性(所有实例共享)

    def __init__(self, name):
        self.name = name      # 实例属性(每个对象独立)
        self.hp = self.max_hp


a = Player("A")
b = Player("B")
a.hp = 50
print(b.hp)               # 100,互不影响

类方法 vs 静态方法

class Player:
    count = 0

    def __init__(self, name):
        self.name = name
        Player.count += 1

    @classmethod
    def total(cls):           # 类方法,第一个参数是 cls
        return cls.count

    @staticmethod
    def is_valid_name(s):     # 静态方法,无 self/cls
        return len(s) > 0


Player("A")
Player("B")
print(Player.total())            # 2
print(Player.is_valid_name(""))  # False

私有属性约定

Python 没有真正的 private,靠命名约定

class Player:
    def __init__(self, name):
        self.name = name        # 公开
        self._hp = 100          # 单下划线 = "内部用,别动"
        self.__secret = 42      # 双下划线 = 名称改写(避免子类冲突)

下一步

下一篇是实战:命令行 Todo 工具——把基础课程的所有知识综合起来。继承、魔术方法这些进阶话题留给「Python 高级教程」。