当前位置: 首页 > news >正文

寒假学习笔记1.31

一、实践练习
练习1:图书管理系统
python
class Book:
"""图书类"""
def init(self, title, author, isbn):
self.title = title
self.author = author
self.isbn = isbn
self.is_borrowed = False

def borrow(self):if not self.is_borrowed:self.is_borrowed = Trueprint(f"《{self.title}》借阅成功")return Trueelse:print(f"《{self.title}》已被借出")return Falsedef return_book(self):if self.is_borrowed:self.is_borrowed = Falseprint(f"《{self.title}》归还成功")else:print(f"《{self.title}》未被借出")def __str__(self):status = "已借出" if self.is_borrowed else "可借"return f"《{self.title}》作者:{self.author} | 状态:{status}"

class Library:
"""图书馆类"""
def init(self, name):
self.name = name
self.books = []

def add_book(self, book):self.books.append(book)print(f"添加图书:{book.title}")def search_by_title(self, title):results = [book for book in self.books if title.lower() in book.title.lower()]return resultsdef show_all_books(self):if not self.books:print("图书馆暂无图书")else:print(f"\n{self.name}馆藏图书:")for i, book in enumerate(self.books, 1):print(f"{i}. {book}")

使用示例

lib = Library("社区图书馆")
book1 = Book("Python编程", "张三", "123")
book2 = Book("算法导论", "李四", "456")
book3 = Book("设计模式", "王五", "789")

lib.add_book(book1)
lib.add_book(book2)
lib.add_book(book3)

lib.show_all_books()

book1.borrow()
book1.borrow() # 尝试再次借阅
book1.return_book()

print("\n搜索'python'😊
for book in lib.search_by_title("python"):
print(book)
练习2:员工薪资系统(继承应用)
python
class Employee:
"""员工基类"""
def init(self, emp_id, name, base_salary):
self.emp_id = emp_id
self.name = name
self.base_salary = base_salary

def calculate_salary(self):"""计算工资,子类应重写"""return self.base_salarydef get_info(self):return f"工号:{self.emp_id} | 姓名:{self.name}"

class Manager(Employee):
"""经理类"""
def init(self, emp_id, name, base_salary, bonus_rate=0.2):
super().init(emp_id, name, base_salary)
self.bonus_rate = bonus_rate

def calculate_salary(self):return self.base_salary * (1 + self.bonus_rate)def get_info(self):return super().get_info() + " | 职位:经理"

class Salesperson(Employee):
"""销售员类"""
def init(self, emp_id, name, base_salary, sales_amount=0):
super().init(emp_id, name, base_salary)
self.sales_amount = sales_amount
self.commission_rate = 0.1

def calculate_salary(self):return self.base_salary + self.sales_amount * self.commission_ratedef get_info(self):return super().get_info() + f" | 职位:销售员 | 销售额:{self.sales_amount}"

class Developer(Employee):
"""开发工程师类"""
def init(self, emp_id, name, base_salary, project_count=0):
super().init(emp_id, name, base_salary)
self.project_count = project_count

def calculate_salary(self):return self.base_salary + self.project_count * 2000def get_info(self):return super().get_info() + f" | 职位:开发工程师 | 项目数:{self.project_count}"

多态应用

employees = [
Manager("M001", "张经理", 10000),
Salesperson("S001", "李销售", 3000, 50000),
Developer("D001", "王开发", 8000, 3)
]

total_salary = 0
print("=== 员工工资明细 ===")
for emp in employees:
salary = emp.calculate_salary()
total_salary += salary
print(f"{emp.get_info()} | 本月工资:{salary:.2f}元")

print(f"\n总工资支出:{total_salary:.2f}元")
练习3:自定义异常类
python
class AgeError(Exception):
"""自定义异常:年龄不合法"""
pass

class Person:
def init(self, name, age):
self.name = name
self.set_age(age) # 通过方法设置年龄

def set_age(self, age):if not isinstance(age, int):raise TypeError("年龄必须是整数")if age < 0 or age > 150:raise AgeError(f"年龄 {age} 不在有效范围(0-150)")self.__age = agedef get_age(self):return self.__age

测试自定义异常

try:
p1 = Person("小明", 20)
print(f"{p1.name}年龄:{p1.get_age()}")

p2 = Person("小红", 200)  # 触发异常

except AgeError as e:
print(f"年龄错误:{e}")
except TypeError as e:
print(f"类型错误:{e}")
二、遇到的问题与解决
问题:忘记在方法定义中添加self参数

解决:实例方法的第一个参数必须是self,调用时自动传递

提示:TypeError: method() takes 0 positional arguments but 1 was given

问题:在类内部调用实例方法时忘记加self.

解决:必须使用self.方法名()调用同一类的其他实例方法

问题:私有属性名称改编规则不熟悉

解决:__attr被重命名为_ClassName__attr,尽量避免直接访问

问题:继承时子类未调用父类__init__

解决:使用super().init(参数)显式调用父类构造函数

后果:父类属性未初始化,导致子类对象缺少父类定义的属性

问题:类属性与实例属性同名时的查找顺序

解决:实例属性优先于类属性(实例.属性),类属性需要通过类名访问
学习总结
面向对象编程是一种强大的编程范式,将数据与操作封装在一起

类是创建对象的模板,__init__方法用于初始化对象状态

实例属性属于具体对象,类属性属于类本身(所有实例共享)

方法类型:实例方法、类方法、静态方法,各有用途

封装通过命名约定实现,Python不强制访问控制,但提供了_和__的约定

继承允许子类重用父类代码,方法重写实现多态

多态使得同一接口可以处理不同类型的对象,提高代码灵活性

http://www.jsqmd.com/news/379624/

相关文章:

  • 寒假学习笔记1.30
  • 探索 Java 中的新 HTTP 客户端
  • P2698 [USACO12MAR] Flowerpot S
  • 中国移动(600941)价值投资深度研究报告 2026.2.13
  • 免费,在线pdf转jpg的链接。
  • 深入解析:Android平板备份到计算机
  • Winter Vacation 2026 - -Klsw
  • 小程序环境+基础页面
  • 三维点云处理技术和深度学习在点云处理中的应用-02:三维点云表征概述
  • 信息论与编码篇---N次拓展信道
  • 信息论与编码篇---积信道
  • 信息论与编码篇---可逆矩阵信道
  • Spark大数据处理:技术、应用与性能优化【1.2】
  • 有限元模型可视化:两套独立Python代码实现带载荷与纯几何对比
  • 6个提示词,能把混乱的剪辑变成专业策略
  • 26.2.12
  • 完整教程:leetcode算法(112.路径总和)
  • 使用Qwen Code的Skills能力重塑工作流 - yi
  • 大数据ETL工具比较:Sqoop vs Flume vs Kafka
  • Django 中间件
  • temperature定义与使用
  • Google API 教程
  • AI编程工具在高可用架构设计中的应用:从故障注入到灾备方案生成实战
  • 视频转换器HD Video Converter Factory 28.6 便携版
  • XML Schema 复合空元素
  • 2001-2024年上市公司媒体关注度数据+Stata代码
  • 必看!2026年琼海海鲜推荐榜单,探索高性价比家庭聚餐海鲜店与知名夜宵选择
  • 企业AI伦理准则制定中的跨部门协作:AI应用架构师的协调技巧
  • 6大方法教你禁止windows11自动更新,windows自动更新怎么关闭,有效阻止关闭win11更新
  • 把Kindle变成电子表!