Python面向对象之组合
726 字
4 分钟
Python面向对象之组合
【一】什么是组合
- 在一个类中以另外一个类的对象作为数据属性,称为类的组合。
【二】组合的使用
- 组合与继承都是用来解决代码的重用性问题。
- 不同的是:
- 继承是一种“是”的关系,比如老师是人、学生是人,当类之间有很多相同的之处,应该使用继承;
- 而组合则是一种“有”的关系,比如老师有生日,老师有多门课程,当类之间有显著不同,并且较小的类是较大的类所需要的组件时,应该使用组合
class Course: def __init__(self, name, period, price): self.name = name self.period = period self.price = price
def tell_info(self): print(f'当前课程名字 {self.name} 当前课程周期 {self.period} 当前课程价格 {self.price}')
class Date: def __init__(self, year, mon, day): self.year = year self.mon = mon self.day = day
def tell_birth(self): print(f'当前生日 {self.year} 年 {self.mon} 月 {self.day} 日')
class People: school = '清华大学'
def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age
# Teacher类基于继承来重用People的代码# 基于组合来重用Date类和Course类的代码class Teacher(People): # 老师是人 def __init__(self, name, sex, age, title, year, mon, day): super().__init__(name, age, sex) # 老师有生日 self.birth = Date(year, mon, day) # 老师有课程,可以在实例化后,往该列表中添加Course类的对象 self.courses = []
def teach(self): print(f'当前老师正在授课 {self.name}')
python = Course('python', '3mons', 3000.0)linux = Course('linux', '5mons', 5000.0)teacher1 = Teacher('dream', 'male', 18, '金牌讲师', 1987, 3, 23)
# teacher1有两门课程teacher1.courses.append(python)teacher1.courses.append(linux)
# 重用Date类的功能teacher1.birth.tell_birth()
# 重用Course类的功能for obj in teacher1.courses: obj.tell_info()
# 当前生日 1987 年 3 月 23 日# 当前课程名字 python 当前课程周期 3mons 当前课程价格 3000.0# 当前课程名字 linux 当前课程周期 5mons 当前课程价格 5000.0- 此时对象teacher1集对象独有的属性、Teacher类中的内容、Course类中的内容于一身(都可以访问到),是一个高度整合的产物
- 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
【三】组合和继承的区别
- 组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,
【1】继承的方式
- 通过继承建立了派生类与基类之间的关系,它是一种’是’的关系,比如白马是马,人是动物。
- 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人
【2】组合的方式
- 用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3…
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














