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

Day 28 训练

Day 28 训练

  • Python 类的定义与继承
    • 类的复习
    • 定义一个类
    • Pass 占位符
    • 初始化方法与普通方法
      • 初始化方法
      • 普通方法
    • 类的继承
      • 基本概念
      • super() 函数
  • 作业


Python 类的定义与继承

在学习 Python 的过程中,类是一个重要的概念。今天,我们来深入探讨一下类的定义与继承。

类的复习

相信大家都已经接触过类的概念了,类就像是一个模板,通过对模板实例化可以实现调用这个类的属性和方法。比如说,创建一个随机森林类,我们就可以方便地调用它的训练和预测方法。

定义一个类

现在,我们来学习如何自己定义一个类,这将帮助我们对类这一概念有更深刻的理解。定义一个类通常包括以下几个要素:

  • 关键字 class :用于声明一个类。
  • 类名 :通常遵循大驼峰命名法(UpperCamelCase),即每个单词的首字母都大写。
  • 冒号(: :在类名后面加上冒号表示类的开始。
  • 初始化函数 init(self) :用于初始化类的实例,注意 init 左右各有两个下划线,需要传入 self 这个特殊的参数,它指向类的实例化地址。

下面是一个简单的类定义示例:

class Teacher:def __init__(self):self.name = "Susan"self.subject = "English"self.age = 33

Pass 占位符

在定义类或者其他代码结构时,我们有时会先用 pass 占位,避免运行错误。等到想好具体要写什么再去补充代码。例如:

class ClassName:pass

在条件语句、循环语句、异常处理语句等依赖缩进的语句中,都可以用 pass 语句来占位。

x = 10
if x > 5:pass
else:print("x is not greater than 5")for i in range(3):passtry:print("hh")
except SomeError:pass
finally:pass

初始化方法与普通方法

初始化方法

初始化方法也叫构造方法,它是在创建对象时自动调用的。它用于初始化实例属性。例如:

class Teacher:def __init__(self, name, age):self.name = nameself.age = ageself.subject = "English"teacher = Teacher("Susan", 33)
print(teacher.name)  # 输出: Susan
print(teacher.age)   # 输出: 33
print(teacher.subject)  # 输出: English

普通方法

普通方法是自己定义的方法,只有在调用类的这个方法的时候,函数才会执行。例如:

class Teacher:def __init__(self):self.name = "Susan"self.subject = "English"self.age = 33def teach_lesson(self):print("上课中")def criticize(self):print("批评人")t = Teacher()
t.teach_lesson()  # 上课中
t.criticize()     # 批评人
print(t.name)     # Susan

类的继承

继承是面向对象编程的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。

基本概念

子类可以复用父类的代码,也可以重写父类的方法,还可以添加新的方法和属性。例如:

class Teacher:def __init__(self, name, subject, age):self.name = nameself.subject = subjectself.age = agedef teach_lesson(self):print(f"{self.name}正在教{self.subject}。")def criticize(self, student_name):print(f"{self.name}正在批评{student_name}。")class MasterTeacher(Teacher):def __init__(self, name, subject, age, experience_years):super().__init__(name, subject, age)self.experience_years = experience_yearsdef teach_lesson(self):print(f"{self.name}(特级教师)正在用高级方法教授{self.subject}。")def give_lecture(self, topic):print(f"{self.name}正在举办关于{topic}的讲座。")master = MasterTeacher("王教授", "数学", 45, 20)
master.teach_lesson()  # 王教授(特级教师)正在用高级方法教授数学。
master.criticize("李同学")  # 王教授正在批评李同学。
master.give_lecture("微积分")  # 王教授正在举办关于微积分的讲座。

super() 函数

super() 是一个内置函数,可以用来调用父类的方法。除了在构造方法中使用,还可以在其他方法中使用。例如:

class Animal:def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print(f"{self.name} 发出声音")class Dog(Animal):def speak(self):super().speak()  # 先调用父类的方法print("汪汪叫")    # 再添加子类的行为dog = Dog("旺财", 3)
dog.speak()

这样,子类就可以在保留父类方法核心逻辑的基础上,进行功能扩展。

通过以上对类的定义与继承的学习,我们对 Python 中的面向对象编程有了更深入的理解。在实际编程中,合理地运用类和继承可以提高代码的可复用性和可维护性。

作业

作业一:

import mathclass Circle:def __init__(self, radius=1):# 初始化圆的半径,默认值为 1self.radius = radiusdef calculate_area(self):# 计算圆的面积,使用公式 πr²return math.pi * self.radius ** 2def calculate_circumference(self):# 计算圆的周长,使用公式 2πrreturn 2 * math.pi * self.radius

作业二:

class Rectangle:def __init__(self, length=1, width=1):# 初始化长方形的长和宽self.length = lengthself.width = widthdef calculate_area(self):# 计算长方形的面积return self.length * self.widthdef calculate_perimeter(self):# 计算长方形的周长return 2 * (self.length + self.width)def is_square(self):# 判断长方形是否为正方形return self.length == self.width

作业三:

import mathclass Circle:def __init__(self, radius):self.radius = radiusdef calculate_circumference(self):return math.pi * self.radius ** 2class Rectangle:def __init__(self, length, width):self.length = lengthself.width = widthdef area(self):return self.length * self.widthdef is_square(self):return self.length == self.widthdef create_shape(shape_type, *args):if shape_type == "circle":if len(args) != 1:raise ValueError("创建圆需要一个参数:半径")return Circle(args[0])elif shape_type == "rectangle":if len(args) != 2:raise ValueError("创建长方形需要两个参数:长和宽")return Rectangle(*args)else:raise ValueError(f"不支持的图形类型: {shape_type}")

浙大疏锦行

相关文章:

  • asp.net core 添加 EntityFrame
  • 每日算法刷题计划day13 5.22:leetcode不定长滑动窗口最短/最小1道题+求子数组个数越长越合法2道题,用时1h
  • 解决Qt Creator在Ubuntu环境下运行Qt程序后,程序中无法输入中文
  • Docker 安装陀螺匠教程
  • Ubuntu 22.04上升级npm版本
  • 【人工智能】低代码基础技术讲解,规则引擎,在低代码平台上的作用,有哪些规则引
  • 10.IIC和BH1750
  • 05算法学习_59. 螺旋矩阵 II
  • [Dify] 在Dify中优雅处理本地部署LLM的Token超限问题
  • tmagic-editor本地实践(2)
  • el-table高度自适应、数据查询后高度展示错误问题
  • sqli-labs第二十三关——过滤注释符
  • GTM4.1-SPE
  • 在 LangChain 中集成 Mem0 记忆系统教程
  • 5月22日复盘-YOLOV5
  • go中len和sizeof区别
  • PT8P2104触控型8Bit MCU
  • Linux Systemd 管理java服务
  • 打卡第二十五天:元组和OS模块
  • 深搜题(如何找到进入下一层深搜的条件)
  • 企业站系统/成都谷歌seo
  • 建设服装网站的亮点/百度霸屏全网推广
  • 利用百度云做网站/营销推广方法有哪些
  • 外国网站加速器/软件外包公司有哪些
  • asp.net做网站实例/如何推广一个平台
  • 毕设做网站是不是太low/优化大师win7官方免费下载