本文目录导读:

银行账户系统(封装 + 继承)
class BankAccount:
"""基础银行账户类"""
def __init__(self, account_number, owner, balance=0):
self.account_number = account_number # 公开属性
self.owner = owner
self.__balance = balance # 私有属性(封装)
def deposit(self, amount):
"""存款"""
if amount > 0:
self.__balance += amount
print(f"存款 {amount},当前余额:{self.__balance}")
else:
print("存款金额必须为正数")
def withdraw(self, amount):
"""取款(带验证)"""
if 0 < amount <= self.__balance:
self.__balance -= amount
print(f"取款 {amount},当前余额:{self.__balance}")
else:
print("余额不足或金额无效")
def get_balance(self):
"""获取余额(通过方法访问私有属性)"""
return self.__balance
def __str__(self):
return f"{self.owner}的账户 [{self.account_number}], 余额:{self.__balance}"
# 继承:储蓄账户
class SavingsAccount(BankAccount):
"""储蓄账户(有最低余额限制和利息)"""
def __init__(self, account_number, owner, balance=0, interest_rate=0.02):
super().__init__(account_number, owner, balance)
self.interest_rate = interest_rate
def withdraw(self, amount):
"""重写取款方法,增加最低余额限制"""
if self.get_balance() - amount < 100: # 最低余额100元
print("取款失败:余额不能低于100元")
else:
super().withdraw(amount) # 调用父类方法
def apply_interest(self):
"""应用利息"""
interest = self.get_balance() * self.interest_rate
self.deposit(interest) # 直接使用父类的deposit
print(f"利息 {interest:.2f} 已存入")
# 使用示例
savings = SavingsAccount("123456", "张三", 1000, 0.03)
savings.deposit(500) # 存款 500,当前余额:1500
savings.withdraw(400) # 取款 400,当前余额:1100
savings.withdraw(800) # 取款失败:余额不能低于100元
savings.apply_interest() # 利息 33.00 已存入
print(savings) # 张三的账户 [123456], 余额:1133.0
OOP 特性展示:
- 封装:
__balance私有属性,通过公共方法访问 - 继承:
SavingsAccount继承BankAccount - 方法重写:
withdraw方法增强功能 - super():调用父类方法
动物声音模拟(多态)
from abc import ABC, abstractmethod
class Animal(ABC):
"""抽象基类"""
def __init__(self, name):
self.name = name
@abstractmethod
def make_sound(self):
"""抽象方法:子类必须实现"""
pass
def describe(self):
"""通用方法"""
print(f"{self.name}是{self.__class__.__name__}")
class Dog(Animal):
def make_sound(self):
return "汪汪汪!"
def fetch(self):
print(f"{self.name}正在捡球")
class Cat(Animal):
def make_sound(self):
return "喵喵喵~"
def purr(self):
print(f"{self.name}在打呼噜")
class Duck(Animal):
def make_sound(self):
return "嘎嘎嘎!"
# 多态函数:传入任何Animal子类都能工作
def animal_concert(animals):
for animal in animals:
animal.describe()
print(f" - 声音:{animal.make_sound()}")
print()
# 使用示例
animals = [
Dog("旺财"),
Cat("咪咪"),
Duck("唐老鸭"),
Dog("来福"),
]
animal_concert(animals)
OOP 特性展示:
- 抽象基类(ABC):定义接口规范
- 多态:同一接口(
make_sound)不同实现 - 鸭子类型:只要对象有
make_sound方法就能使用
员工管理系统(组合 + 类方法)
class Department:
"""部门类(组合关系的基础)"""
def __init__(self, name, manager=None):
self.name = name
self.manager = manager
self.employees = []
def add_employee(self, employee):
self.employees.append(employee)
print(f"{employee.name} 加入 {self.name}")
def __str__(self):
return f"部门:{self.name},员工数:{len(self.employees)}"
class Employee:
"""员工类"""
# 类变量(所有实例共享)
company = "XX科技有限公司"
employee_count = 0
def __init__(self, name, age, position, salary):
# 实例变量(每个实例独立)
self.name = name
self.age = age
self.position = position
self.salary = salary
self.department = None # 初始无部门
Employee.employee_count += 1 # 类变量递增
def join_department(self, department):
"""加入部门(建立组合关系)"""
self.department = department
department.add_employee(self)
def get_info(self):
info = f"姓名:{self.name}, 职位:{self.position}, 薪资:{self.salary}"
if self.department:
info += f", 部门:{self.department.name}"
return info
@classmethod
def create_manager(cls, name, age, salary):
"""类方法:创建经理(固定的职位)"""
return cls(name, age, "部门经理", salary)
@staticmethod
def validate_salary(salary):
"""静态方法:验证薪资合法性"""
return salary > 0 and salary < 1000000
# 使用示例
# 创建部门
engineering = Department("研发部")
marketing = Department("市场部")
# 通过类方法创建经理
zhang = Employee.create_manager("张经理", 35, 30000)
li = Employee.create_manager("李经理", 32, 28000)
# 创建普通员工
wang = Employee("王工", 28, "高级工程师", 20000)
zhao = Employee("赵工", 25, "软件工程师", 15000)
chen = Employee("陈专员", 26, "市场专员", 12000)
# 建立组合关系
wang.join_department(engineering)
zhao.join_department(engineering)
chen.join_department(marketing)
zhang.join_department(engineering) # 经理也是员工
# 显示信息
print(f"公司:{Employee.company}") # 公司:XX科技有限公司
print(f"员工总数:{Employee.employee_count}") # 员工总数:5
print(engineering) # 部门:研发部,员工数:3
print(wang.get_info())
print(Employee.validate_salary(500000)) # False
OOP 特性展示:
- 组合:Employee 包含 Department 引用
- 类变量/类方法:
employee_count、create_manager - 静态方法:
validate_salary - 关联关系:双向关联(员工知道部门,部门知道员工)
图书馆借阅系统(综合案例)
import datetime
class Book:
"""图书类"""
def __init__(self, isbn, title, author, total_copies):
self.isbn = isbn
self.title = title
self.author = author
self.total_copies = total_copies
self.available_copies = total_copies # 可借数量
def is_available(self):
return self.available_copies > 0
def borrow(self):
if self.is_available():
self.available_copies -= 1
return True
return False
def return_book(self):
if self.available_copies < self.total_copies:
self.available_copies += 1
return True
return False
def __str__(self):
return f"《{self.title}》 by {self.author} (剩余{self.available_copies}/{self.total_copies})"
class Member:
"""会员类"""
def __init__(self, member_id, name):
self.member_id = member_id
self.name = name
self.borrowed_books = [] # 借阅记录
def borrow_book(self, book):
if len(self.borrowed_books) >= 5:
print(f"{self.name} 已达到最大借阅数量")
return False
if book.borrow():
self.borrowed_books.append({
'book': book,
'borrow_date': datetime.date.today()
})
print(f"{self.name} 借阅《{book.title}》成功")
return True
else:
print(f"《{book.title}》暂无库存")
return False
def return_book(self, book):
for record in self.borrowed_books:
if record['book'] is book:
book.return_book()
self.borrowed_books.remove(record)
print(f"{self.name} 归还《{book.title}》成功")
return True
print(f"{self.name} 没有借阅《{book.title}》")
return False
def __str__(self):
return f"会员:{self.name} (ID:{self.member_id}), 已借{len(self.borrowed_books)}本"
class Library:
"""图书馆类(管理所有书籍和会员)"""
def __init__(self, name):
self.name = name
self.books = {}
self.members = {}
def add_book(self, book):
self.books[book.isbn] = book
print(f"添加图书:{book}")
def register_member(self, member):
self.members[member.member_id] = member
print(f"注册会员:{member}")
def borrow_book(self, member_id, isbn):
member = self.members.get(member_id)
book = self.books.get(isbn)
if member and book:
member.borrow_book(book)
else:
print("会员或图书不存在")
def return_book(self, member_id, isbn):
member = self.members.get(member_id)
book = self.books.get(isbn)
if member and book:
member.return_book(book)
else:
print("会员或图书不存在")
def display_status(self):
print(f"\n=== {self.name} 当前状态 ===")
print("图书库存:")
for book in self.books.values():
print(f" {book}")
print("会员信息:")
for member in self.members.values():
print(f" {member}")
# 使用示例
library = Library("智慧图书馆")
# 添加图书
library.add_book(Book("978-7-111-11111-1", "Python编程", "张三", 3))
library.add_book(Book("978-7-111-22222-2", "数据结构", "李四", 2))
library.add_book(Book("978-7-111-33333-3", "算法导论", "王五", 1))
# 注册会员
library.register_member(Member("M001", "小明"))
library.register_member(Member("M002", "小红"))
# 借还书操作
library.borrow_book("M001", "978-7-111-11111-1") # 小明借Python编程
library.borrow_book("M001", "978-7-111-22222-2") # 小明借数据结构
library.borrow_book("M002", "978-7-111-11111-1") # 小红借Python编程
library.display_status()
library.return_book("M001", "978-7-111-11111-1") # 小明还Python编程
library.display_status()
OOP 特性展示:
- 类关系设计:Library 聚合 Book 和 Member
- 职责分离:每个类负责自己的业务逻辑
- 对象交互:Member 与 Book 协同完成借阅
- 封装:内部状态通过方法管理
OOP 核心概念总结表
| 概念 | 案例位置 | 说明 |
|---|---|---|
| 封装 | 银行账户 __balance |
隐藏内部数据,通过方法访问 |
| 继承 | SavingsAccount -> BankAccount | 复用父类代码,扩展新功能 |
| 多态 | Animal -> Dog/Cat/Duck | 统一接口,不同实现 |
| 抽象 | Animal 抽象基类 | 定义接口规范 |
| 组合 | Employee + Department | “has-a”关系 |
| 类方法 | Employee.create_manager | 工厂方法模式 |
| 静态方法 | Employee.validate_salary | 工具函数,无关实例 |
这些案例从简单到复杂,展示了 Python OOP 的主要特性,建议先理解前两个案例,然后尝试自己修改和扩展代码来加深理解。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播