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

Day28 打卡

DAY 28 类的定义和方法

知识点回顾:

  1. 类的定义
  2. pass占位语句
  3. 类的初始化方法
  4. 类的普通方法
  5. 类的继承:属性的继承、方法的继承

一个常见的类的定义包括了:

1. 关键字class

2. 类名

3. 语法固定符号冒号(:)

4. 一个初始化函数__init__(self)  

注意:注意:init左右各有两个下划线__,需要传入self这个特殊的参数

类的初始化方法

初始化方法又叫构造方法、特殊方法

类有2种方法

1. 初始化方法,

2. 普通放大

class Teacher: # 这里不需要括号def __init__(self): #初始化方法,这里没有传入参数self.name = "Susan" # 给类定义一些属性self.subject = "English"self.age = 33Teacher = Teacher() # 创建一个Teacher类的实例
print(Teacher.name)class Teacher:def __init__(self, name, age):# 初始化方法,传入了参数self.name = name # 外界的参数,需要通过self.xxx来复制给类自己的属性self.age = ageself.subject = "English"  # 这个属性仍然是在创建时就设定好的# 创建一个Teacher对象的例子,构造方法的参数必须
teacher = Teacher("Susan", 33) # 如果在初始化方法中设置了非默认的参数,那么外界就必须要传入才行
print(teacher.name)  # 输出: Susan
print(teacher.age)   # 输出: 33
print(teacher.subject)  # 输出: English

类的普通方法

除了init方法(初始化方法,又名构造方法),还包含一些普通方法(自己定义)

普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行

普通方法是只有你调用类的这个方法的时候,函数才会执行

class Teacher:# 初始化方法接受参数以动态设置教师的属性def __init__(self, name, subject, age):self.name = nameself.subject = subjectself.age = age# 不是init的都叫做普通方法# 普通方法,模拟教师上课的行为def teach_lesson(self):print(f"{self.name}正在教{self.subject}。")# 另一个普通方法,模拟教师批评学生的行为def criticize(self, student_name):print(f"{self.name}正在批评{student_name}。")# 创建Teacher类的实例
teacher = Teacher("Susan", "English", 33)# 调用教师的方法
teacher.teach_lesson()
teacher.criticize("John")#普通方法的参可以等到调用该方法的时候再传

类的继承

类已经是比较优秀的封装了,封装了函数、封装了属性

正如装饰器进一步封装了函数的可复用的功能,装饰器函数封装了函数

那么有没有东西可以进一步封装类呢?这就引出了类的继承

在面向对象编程中,继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。子类可以:

1. 复用父类的代码(无需重新实现)。

2. 重写父类的方法(修改或增强功能)。

3. 添加新的方法和属性(扩展功能)。

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}。")# 继承 Teacher 类,起名特级教师
class MasterTeacher(Teacher): # 1. 继承需要在括号中指定父类def __init__(self, name, subject, age, experience_years):# 2. 继承的时候需要调用父类的构造方法,所以需要传入父类的参数,同时也可以传入自己的参数# 调用父类的构造方法初始化基本属性super().__init__(name, subject, age) # 3. 调用父类的构造方法,这里的super()是一个内置函数,返回父类的实例# 4. 此时子类自动拥有了父类的属性和方法# 添加子类特有的属性self.experience_years = experience_years # 5. 子类特有的属性可以在这里定义# 重写父类方法,增强功能-----如果子类定义了与父类同名的方法,子类实例会优先调用子类的方法。def teach_lesson(self): # 6. 重写父类的方法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("微积分")  # 调用子类新增的方法

其实和java中的继承方式大致一致,都是面向对象编程的特点,语法略有不同,需要格外注意一些@浙大疏锦行

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

相关文章:

  • 附051.Kubernetes Karmada kubectl 插件部署联邦及使用
  • JBoltAI赋能产业数智化转型:AI开发新范式的深度实践
  • Java全栈工程师面试实录:从基础到高并发场景的技术探索
  • 【56页PPT】华为集成服务交付ISD业务变革总体方案(附下载方式)
  • OpenLayers常用控件 -- 章节六:全屏控件教程
  • 基础算法:倍增
  • RSA-e和phi不互素
  • Paimon——官网阅读:配置
  • Miniconda安装与VSCode搭建远程Python、Jupyter开发环境
  • Go基础(④指针)
  • C语言初学者笔记【文件操作】
  • ES6 核心特性详解:从变量声明到函数参数优化
  • Go基础(⑤Consul)
  • repo 学习教程
  • 第2课:环境搭建:基于DeepSeek API的开发环境配置
  • 【UAV】基于PX4+Ubuntu24.04.3的无人机制作的开发环境搭建
  • Linux awk 命令使用说明
  • 工业显示器在地铁电力监控与运维中的应用
  • 每天五分钟深度学习:神经网络的梯度下降和反向传播算法
  • Python实战:爬取百度热搜榜,制作动态可视化报告
  • 企业级监控方案对比:Zabbix vs Prometheus
  • (nice!!!)(LeetCode 面试经典 150 题 ) 130. 被围绕的区域(深度优先搜索dfs || 广度优先搜索bfs)
  • uni-app倒计时公共组件 封装,倒计时组件
  • 【Next】服务端接口
  • scikit-learn零基础配置(含python、anaconda)
  • 大电流场景首选:捷多邦解析厚铜 PCB 的应用优势
  • 【PCIe EP 设备入门学习专栏 -- 8.1.2 PCIe EP 通路详细介绍】
  • v0.29.1 敏感词性能优化之内部类+迭代器内部类
  • 中州养老项目:利用Redis解决权限接口响应慢的问题
  • Pandas基础(安装、导入Pandas、读取数据、查看数据)