python基础-面向对象编程之组合
面向对象编程之组合
定义:一个对象中拥有另一个或其他多个对象的属性和方法。
作用:减少代码的冗余,降低耦合度
关于耦合度的说明
耦合:通俗地讲,就是相互作用,相互影响的意思
耦合度越高,程序的可扩展性越低;
耦合度越低,程序的可扩展性越高。
组合和继承的区别
组合:对象与对象之间的关系,可理解成“什么有什么”的关系
继承:类与类之间的关系,子类继承父类属性,是“从属”关系,即“什么是什么”的关系。
class Course:
"""课程类"""
def __init__(self, course_name, course_price, course_duration):
"""课程名称,课程价格,课程时长"""
self.course_name = course_name
self.course_price = course_price
self.course_duration = course_duration
def show_course(self):
"""输出课程信息"""
print(f"""
========课程信息========
课程名称:{self.course_name}
课程价格:{self.course_price}
课程时长:{self.course_duration}
""")
class Student:
"""学生类"""
def __init__(self, name, age, gender):
"""姓名,年龄,性别"""
self.name = name
self.age = age
self.gender = gender
self.course_list = []
def add_course(self, course_obj):
"""增加课程"""
self.course_list.append(course_obj)
# 使用了Course类的course_name 属性
print(f"课程{course_obj.course_name}添加成功!")
def show_all_course(self):
"""显示学生课程表中所有课程信息"""
for course in self.course_list:
# 使用了Course类的show_course() 方法
course.show_course()
# 创建学生对象
stu = Student("dawn", 27, "男")
# 创建课程对象
python_obj = Course("python", 28888, 6)
go_obj = Course("go", 77777, 5)
# 将课程添加到学生对象中
stu.add_course(python_obj)
stu.add_course(go_obj)
# 打印学生中所有的课程表信息
stu.show_all_course()
输出结果
课程python添加成功!
课程go添加成功!
========课程信息========
课程名称:python
课程价格:28888
课程时长:6
========课程信息========
课程名称:go
课程价格:77777
课程时长:5
python基础-面向对象编程之组合的更多相关文章
- python基础-面向对象编程之继承
面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...
- python基础-面向对象编程之封装、访问限制机制和property
面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...
- python基础-面向对象编程之反射
面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...
- python基础-面向对象编程之多态
面向对象编程之多态以及继承.抽象类和鸭子类型三种表现形式 多态 定义:同一种类型的事物,不同的形态 作用: 多态也称之为"多态性".用于在不知道对象具体类型的情况下,统一对象调用方 ...
- Python基础教程之List对象 转
Python基础教程之List对象 时间:2014-01-19 来源:服务器之家 投稿:root 1.PyListObject对象typedef struct { PyObjec ...
- Python基础教程之udp和tcp协议介绍
Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...
- python面向对象编程之组合
前面讲了面向类与对象的继承,知道了继承是一种什么"是"什么的关系. 然而类与类之间还有另一种关系,这就是组合 先来看两个例子: 先定义两个类,一个老师类,老师类有名字,年龄,出生的 ...
- 2015/9/22 Python基础(18):组合、派生和继承
一个类被定义后,目标就是把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其他数据类型及逻辑执行流混合使用.有两种方法可以在你的代码中利用类.第一种是组合,就是让不同的类混合并加入到其他类中, ...
- python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...
随机推荐
- linux中以.d结尾的目录
一般为了保持对原有配置方式的兼容,而增加的.d结尾目录. 如: /etc/X11/xorg.conf 这原本是个文件,现在也有了一个/etc/X11/xorg.conf.d这样的目录,显卡驱动的相关设 ...
- VIJOS-P1325 桐桐的糖果计划
VIJOS-P1325 桐桐的糖果计划 JDOJ 1432 桐桐的糖果计划 https://neooj.com/oldoj/problem.php?id=1432 Description 桐桐很喜欢吃 ...
- LG1410 子序列 二分图判定
问题描述 LG1410 题解 如果\(i<j,a_j \le a_i\),那么他它们不能在一个上升序列中. 于是在\(i,j\)之间建边,看建出来的图是不是二分图即可. \(\mathrm{Co ...
- Python进阶-XII serialize(序列化)、序列化模块
一.serialize 序列化 1.什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在 ...
- HDU 6588 Function
[传送门] 求$$\sum_{i=1}^{n} \gcd(\lfloor \sqrt[3]{i} \rfloor, i)$$题解写的很清楚,自己重新推一推. $$\sum_{i=1}^{n} \gcd ...
- [LeetCode] 300. Longest Increasing Subsequence 最长递增子序列
Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...
- 洛谷 P5021 [NOIP2018]赛道重建
洛谷 P5021 [NOIP2018]赛道重建 传送门 思路 思路就是常规的思路,所以就不说了--我就是来记录一下我的\(AC\)之路的,真的是太爽了 没错--我也是一个个打的部分分,最后终于AC的, ...
- [LeetCode] 438. Find All Anagrams in a String 找出字符串中所有的变位词
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ...
- 第02组 Alpha冲刺(4/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...
- Docker笔记:常用服务安装——Nginx、MySql、Redis(转载)
转载地址:https://www.cnblogs.com/spec-dog/p/11320513.html 开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的 ...