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

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}")

浙大疏锦行

http://www.xdnf.cn/news/8269.html

相关文章:

  • nginx和docker常用指令
  • thinkpad x220降频到0.7Ghz解决办法
  • 遥控器芯片6nm与3nm技术对比!
  • 如何将吉客云奇门数据无缝对接金蝶云星空
  • 远程升级方案(经通讯管理机)
  • 怎么有效降低知网AIGC率?
  • 华为RH1288HV3 BMC忘记用户名密码如何恢复默认
  • 华为仓颉语言如何进行交叉编译
  • 第三十二天打卡
  • 构建基于全面业务数据的大数据与大模型企业护城河战略
  • 【Linux】网络基础3
  • JUC入门(五)
  • 进程、线程和协程切换的比喻
  • 【分治】归并排序:递归版 非递归版
  • IDC机房交换机紧急更换的流程和注意事项
  • torch.gather()和torch.sort
  • 火语言UI组件--控件函数调用
  • 免费开源的图片分割小工具
  • RT-Thread源码阅读(1)——基本框架
  • 通过云服务器实现异地组网 部署WireGuard
  • 【机器学习】 关于外插修正随机梯度方法的数值实验
  • 听脑AI:革新沟通方式,开启高效信息时代
  • 核实发票的真实性与合法性-发票查验接口-虚假发票防范
  • 关于Newtonsoft版本不兼容问题处理
  • sentinel滑动时间窗口算法详解
  • 系统性能分析基本概念(3) : Tuning Efforts
  • imuerrset
  • PT8P2104触控型8Bit MCU
  • 【Django Serializer】一篇文章详解 Django 序列化器
  • deep-rtsp 摄像头rtsp配置工具