学习进度条

每日总结

今日学习情况

  • 学习时间:1小时
  • 代码量:约100行
  • 博客量:1篇

学到的知识点

  1. Python类的定义与继承

    • 学习了如何定义基类(如People)和派生类(如StudentTeacher),通过super()调用父类方法实现代码复用。
    • 示例:
      class People:
          def __init__(self, name, gender, age):
              self.name = name
              self.gender = gender
              self.age = age
      class Student(People):
          def __init__(self, name, gender, age, student_id):
              super().__init__(name, gender, age)
              self.student_id = student_id
      
  2. 多态与接口设计

    • 通过接口(如TeacherInterface)统一方法(如calculate_salary),实现不同职称教师类的多态行为。
    • 示例:
      class TeacherInterface:
          def calculate_salary(self):
              raise NotImplementedError
      class Professor(Teacher, TeacherInterface):
          def calculate_salary(self):
              return 5000 + 50 * self.teaching_hours
      
  3. 多重继承与MRO

    • 实践了多重继承(如GradOnWork继承GraduateTeacher),需注意初始化顺序和属性冲突。
    • 示例:
      class GradOnWork(Graduate, Teacher):
          def __init__(self, ...):
              People.__init__(self, ...)  # 显式调用基类初始化
      
  4. 自定义异常处理

    • 创建Cexception类处理日期类(Date)中的非法输入(如月份超出范围)。
    • 示例:
      class Cexception(Exception):
          def __init__(self, message):
              self.message = message
      try:
          date = Date(2023, 13, 1)  # 触发异常
      except Cexception as e:
          print(e)
      
  5. 运算符重载

    • Point类中重载__lt____eq__等运算符,实现基于距离的比较逻辑。
    • 示例:
      class Point:
          def __lt__(self, other):
              return self.distance_to_origin() < other.distance_to_origin()
      

代码功能解释

  1. 高校人员信息包

    • 基类People定义姓名、性别、年龄等通用属性。
    • 派生类Student添加学号、成绩;Teacher添加职务、部门;Graduate扩展研究方向;GradOnWork融合学生和教师属性。
  2. 三维图形体系

    • 接口ThreeDShape定义周长、面积、体积的抽象方法。
    • 派生类Circle计算圆周长/面积;SphereCylinderCone分别实现表面积和体积公式。
  3. 教师工资计算

    • 多态应用ProfessorAssociateProfessorLecturer根据职称实现不同的工资计算逻辑。
  4. 日期类与异常处理

    • 健壮性Date类验证年月日合法性,Cexception提示具体错误(如“月份必须在1-12之间”)。
  5. 平面点类

    • 运算符重载Point类支持直接比较点到原点的距离(如p1 > p2)。

技术示例

鸭子类型示例

class Duck:
    def quack(self):
        print("Quack!")
class Person:
    def quack(self):
        print("I'm quacking!")
def make_quack(obj):
    obj.quack()  # 不关心类型,只要有quack方法
make_quack(Duck())   # 输出: Quack!
make_quack(Person()) # 输出: I'm quacking!

总结

今日实验涵盖了Python面向对象的核心概念,通过实际编码加深了对继承、多态、接口和异常处理的理解。后续需注意:

  • 避免多重继承的复杂性,优先使用组合。
  • 合理使用@property和特殊方法(如__str__)提升代码可读性。
posted @ 2025-04-28 21:52  haoyinuo  阅读(16)  评论(0)    收藏  举报