面向对象编程(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)
总结口诀:
- 类像图纸,对象是实体
- 封装数据,继承能力
- 多态变化,抽象规矩
- 多用组合,少用继承
现在你可以创造自己的代码王国了!👑
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于