(敲黑板)各位程序员小伙伴们!今天我们要聊的这个话题,绝对是你编程路上必须打通的"任督二脉"——Python面向对象编程!!!
你可能听说过这些名词:类、对象、继承、多态…是不是感觉脑袋嗡嗡的?别慌!咱们今天就用最接地气的方式,把这些概念揉碎了讲明白。相信我,学完这篇,你会突然发现:“原来面向对象这么有意思!”
类(Class)就像是一个设计图纸。举个栗子:汽车设计图定义了轮子数量、发动机类型等特征,但图纸本身不能开上路对吧?
对象(Object)就是根据图纸造出来的具体汽车。比如根据汽车设计图制造的宝马X5、特斯拉Model3都是对象。
(超级重要)类和对象的关系:类→模板/蓝图,对象→根据模板创建的具体实例
class BankAccount:
def __init__(self, balance):
self.__balance = balance # 双下划线开头的属性是私有的
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def get_balance(self):
return self.__balance
# 使用示例
my_account = BankAccount(1000)
my_account.deposit(500)
print(my_account.get_balance()) # 输出1500
# print(my_account.__balance) # 报错!外部不能直接访问私有属性
封装的好处(划重点):
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass # 抽象方法
class Dog(Animal):
def speak(self):
return "汪汪!"
class Cat(Animal):
def speak(self):
return "喵~"
# 使用示例
my_dog = Dog("阿黄")
print(f"{my_dog.name}说:{my_dog.speak()}") # 输出:阿黄说:汪汪!
继承的妙用:
def animal_sound(animal):
print(animal.speak())
# 传入不同子类对象
animal_sound(Dog("小黑")) # 输出:汪汪!
animal_sound(Cat("小白")) # 输出:喵~
多态的精髓:
class Student:
def __init__(self, stu_id, name, score):
self.stu_id = stu_id
self.name = name
self.score = score
def display_info(self):
return f"学号:{self.stu_id} 姓名:{self.name} 成绩:{self.score}"
class StudentManager:
def __init__(self):
self.students = []
def add_student(self, student):
self.students.append(student)
print(f"成功添加学生:{student.name}")
def find_student(self, stu_id):
for student in self.students:
if student.stu_id == stu_id:
return student
return None
def average_score(self):
total = sum(student.score for student in self.students)
return total / len(self.students) if self.students else 0
def show_all(self):
for student in self.students:
print(student.display_info())
# 创建管理系统
manager = StudentManager()
# 添加学生
manager.add_student(Student("001", "张三", 90))
manager.add_student(Student("002", "李四", 85))
manager.add_student(Student("003", "王五", 92))
# 查询学生
stu = manager.find_student("002")
if stu:
print(f"找到学生:{stu.display_info()}")
# 统计平均分
print(f"平均分:{manager.average_score():.2f}")
# 显示所有学生
print("\n所有学生信息:")
manager.show_all()
(血泪教训)继承层级不要太深!一般建议不超过3层,否则会变成"面向过程"的另一种形式
不要为了用设计模式而用设计模式!记住KISS原则(Keep It Simple, Stupid)
面向对象不是银弹,但绝对是现代编程的必备技能!记住:类就像乐高积木的模具,对象就是拼出来的积木。通过封装、继承、多态,我们可以构建出灵活、可维护的复杂系统。
最后留个思考题:如果让你用面向对象的方式设计一个"自动售货机"系统,你会怎么设计类结构?欢迎在评论区分享你的设计思路!