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

python打卡day28

类的简单复习

知识点回顾:

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

 类就是对属性和方法的封装,一个常见的类的定义包括了:

  1. 关键字class
  2. 类名
  3. 语法固定符号冒号(:)
  4. 一个初始化函数__init__(self)  

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

Python 通过缩进来定义代码块的结构,当规划好准备写一个函数、或者一个类,关键词定义后,会先用pass在缩进位置占位,避免运行错误,等到想好写什么再去补上

class ClassName: # 类名通常遵循大驼峰命名法 (UpperCamelCase),即每个单词的首字母都大写,class是定义类的关键词# 类的代码块 (可以包含属性定义、方法定义等)pass # pass 是一个占位符,表示这里暂时没有任何内容

类有两种方法,初始化方法和普通方法。先来举个例子说说初始化方法:

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函数就会自动执行。普通方法是只有你显式调用类的这个方法的时候,函数才会执行

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")#普通方法的参可以等到调用该方法的时候再传# 输出:Susan正在教English。
# 输出:Susan正在批评John。

虽然用起来差不多,但感觉init方法用来初始化对象的初始状态(比如设置必要属性的初始值),普通方法用来定义对象的行为(比如让对象执行某个操作)

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

  • 复用父类的代码(无需重新实现)
  • 重写父类的方法(修改或增强功能)
  • 添加新的方法和属性(扩展功能)
# 先沿用之前定义的teacher类
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("微积分")  # 调用子类新增的方法# 输出:王教授(特级教师)正在用高级方法教授数学。
# 输出:王教授正在批评李同学。
# 输出:王教授正在举办关于微积分的讲座。

注意一下子类定义时传入参数是父类名称,用 super() 函数调用父类的方法,不管是构造方法还是普通方法都行

@浙大疏锦行

相关文章:

  • Florence2代码实战
  • STM32IIC实战-OLED模板
  • 端口443在git bash向github推送时的步骤
  • 手机打电话时由对方DTMF响应切换多级IVR语音应答(二)
  • C++中析构函数不设为virtual导致内存泄漏示例
  • 使用glsl 来做视频矫正
  • 单细胞转录组(2)单细胞测序原理
  • 【Linux网络与网络编程】12.NAT技术内网穿透代理服务
  • 【前端基础】HTML元素隐藏的四个方法(display设置为none、visibikity设置为hidden、rgba设置颜色、opacity设置透明度)
  • DeepSeek 赋能社会科学:解锁研究新范式
  • 现在市面上三大常用的拓客软件好用吗?
  • 机器学习,深度学习,神经网络,深度神经网络之间有何区别?
  • PostgreSQL内幕剖析——结构与架构
  • C++类与对象--1 特性一:封装
  • 深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第一篇:I2C总线协议深度解剖
  • CentOS 下 FTP 与 NFS 服务深度解析:从基础配置到实战应用
  • 深度学习推理引擎---OpenVINO
  • Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析
  • 如何在纷杂的环境当中保持保持独立思考能力?
  • linux c++头文件生成源文件 使用python脚本 配置vim快捷键
  • 大外交丨3天拿下数万亿美元投资,特朗普在中东做经济“加法”和政治“减法”
  • 铁路端午假期运输火车票今日开售,12306提升应对超大规模并发访问需求能力
  • 国家卫生健康委通报关于肖某引发舆情事件调查处置进展情况
  • 中科飞测将投资超10亿元,在上海张江成立第二总部
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 多地警务新媒体整合:关停交警等系统账号,统一信息发布渠道