面相对象编程

面向对象编程(OOP)就像「创造你自己的虚拟生物」🤖,它让代码像真实世界一样组织。让我们用「设计机器人」的比喻来理解它~

一、基础概念:类和对象

  • 类(Class) :机器人的设计图纸

  • 对象(Object) :根据图纸造出的真实机器人

    # 设计图纸 → 类 class Robot: # 初始化方法(设置默认属性) def __init__(self, name, color): self.name = name # 机器人名字 self.color = color # 机器人颜色 self.battery = 100 # 电量默认100% # 定义行为 → 方法 def say_hello(self): print(f"{self.color}{self.name}说:你好!") # 创建真实机器人 → 对象 robot1 = Robot("小强", "蓝色") robot2 = Robot("小红", "粉色") robot1.say_hello() # 输出:蓝色的小强说:你好! robot2.say_hello() # 输出:粉色的小红说:你好!


二、四大核心概念

1️⃣ 封装 → 隐藏内部细节

class BankAccount: def __init__(self): self.__balance = 0 # 私有属性(双下划线开头) # 通过方法安全操作 def deposit(self, money): if money > 0: self.__balance += money def check_balance(self): return self.__balance # 使用示例 my_account = BankAccount() my_account.deposit(100) print(my_account.check_balance()) # 输出:100 # print(my_account.__balance) # ❌ 会报错(不能直接访问)

2️⃣ 继承 → 传承基因

# 父类(基础机器人) class BasicRobot: def __init__(self, name): self.name = name def walk(self): print(f"{self.name}正在行走...") # 子类(升级版机器人) class FightingRobot(BasicRobot): def attack(self): print(f"{self.name}发动攻击!💥") # 使用继承 robot = FightingRobot("战神") robot.walk() # 继承父类方法 robot.attack() # 自己独有的方法

3️⃣ 多态 → 不同形态的表现

class Cat: def speak(self): print("喵喵~") class Dog: def speak(self): print("汪汪!") # 统一调用不同对象的方法 for animal in [Cat(), Dog()]: animal.speak() # 输出: # 喵喵~ # 汪汪!

4️⃣ 抽象 → 设定统一标准

from abc import ABC, abstractmethod # 抽象类(不能直接创建对象) class Shape(ABC): @abstractmethod def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 # 必须实现抽象方法才能使用 my_circle = Circle(5) print(my_circle.area()) # 输出78.5

三、类相关的特殊概念

1️⃣ 类属性 vs 实例属性

class Phone: brand = "Apple" # 类属性(所有手机共享) def __init__(self, color): self.color = color # 实例属性(每个手机不同) # 使用示例 phone1 = Phone("黑色") phone2 = Phone("白色") print(phone1.brand) # Apple(类属性) Phone.brand = "华为" # 修改类属性会影响所有实例 print(phone2.brand) # 华为

2️⃣ 静态方法(不需要对象参与)

class Calculator: @staticmethod def add(a, b): return a + b # 直接通过类调用 print(Calculator.add(3,5)) # 8

四、避坑指南

1️⃣ 不要忘记 self​参数

# ❌ 错误写法 class Test: def show(): print("出错了!") # ✅ 正确写法 class Test: def show(self): print("成功!")

2️⃣ 合理使用继承层次

# ❌ 错误的多层继承 class A: pass class B(A): pass class C(B): pass # 层次太深难维护 # ✅ 推荐使用组合代替继承 class Engine: pass class Car: def __init__(self): self.engine = Engine()

五、综合练习:游戏角色系统

class Character: def __init__(self, name, hp): self.name = name self.hp = hp def show_status(self): print(f"{self.name}(HP: {self.hp})") class Warrior(Character): def attack(self): print(f"{self.name}使用剑攻击!⚔️") self.hp -= 5 # 攻击消耗体力 class Mage(Character): def cast_spell(self): print(f"{self.name}施放火球术!🔥") self.hp -= 8 # 创建角色 hero1 = Warrior("亚瑟", 100) hero2 = Mage("梅林", 80) hero1.attack() # 亚瑟使用剑攻击!⚔️ hero2.cast_spell() # 梅林施放火球术!🔥 hero1.show_status() # 亚瑟(HP: 95)

总结口诀

  • 类像图纸,对象是实体
  • 封装数据,继承能力
  • 多态变化,抽象规矩
  • 多用组合,少用继承

现在你可以创造自己的代码王国了!👑

  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    586 引用 • 3538 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...