面向对象编程之组合

定义:一个对象中拥有另一个或其他多个对象的属性和方法

作用:减少代码的冗余,降低耦合度

关于耦合度的说明
耦合:通俗地讲,就是相互作用,相互影响的意思
耦合度越高,程序的可扩展性越低;
耦合度越低,程序的可扩展性越高。

组合和继承的区别

组合:对象与对象之间的关系,可理解成“什么有什么”的关系

继承:类与类之间的关系,子类继承父类属性,“从属”关系,即“什么是什么”的关系。

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基础-面向对象编程之组合的更多相关文章

  1. python基础-面向对象编程之继承

    面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...

  2. python基础-面向对象编程之封装、访问限制机制和property

    面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...

  3. python基础-面向对象编程之反射

    面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...

  4. python基础-面向对象编程之多态

    面向对象编程之多态以及继承.抽象类和鸭子类型三种表现形式 多态 定义:同一种类型的事物,不同的形态 作用: 多态也称之为"多态性".用于在不知道对象具体类型的情况下,统一对象调用方 ...

  5. Python基础教程之List对象 转

    Python基础教程之List对象 时间:2014-01-19    来源:服务器之家    投稿:root   1.PyListObject对象typedef struct {    PyObjec ...

  6. Python基础教程之udp和tcp协议介绍

    Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...

  7. python面向对象编程之组合

    前面讲了面向类与对象的继承,知道了继承是一种什么"是"什么的关系. 然而类与类之间还有另一种关系,这就是组合 先来看两个例子: 先定义两个类,一个老师类,老师类有名字,年龄,出生的 ...

  8. 2015/9/22 Python基础(18):组合、派生和继承

    一个类被定义后,目标就是把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其他数据类型及逻辑执行流混合使用.有两种方法可以在你的代码中利用类.第一种是组合,就是让不同的类混合并加入到其他类中, ...

  9. python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例

    继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...

随机推荐

  1. Mysql8.0中caching_sha2_password报错解决

    https://blog.csdn.net/litte_frog/article/details/80874105

  2. python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题

    1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...

  3. Artificial Intelligence in Finance

    https://sigmoidal.io/real-applications-of-ai-in-finance/ Artificial Intelligence is taking the finan ...

  4. spring中@Param和mybatis中@Param使用区别(暂时还没接触)

    1.spring中@Param(org.springframework.data.repository.query.Param) int selectRoleCount(@Param("bu ...

  5. Spring IOC小记

    1. What IOC (Inversion Of Control,控制反转)与DI(Dependency Injecion,依赖注入) 用于对象间解耦,如在以前若对象A依赖B则需要在A中负责B的创建 ...

  6. 【微信小程序】手写索引选择器(城市列表,汽车品牌选择列表)

    摘要: 小程序索引选择器,点击跳转相应条目,索引可滑动,滑动也可跳转 场景:城市选择列表, 汽车品牌选择列表 所用组件: scroll-view(小程序原生) https://developers.w ...

  7. Java 并发系列之八:java 并发工具(4个)

    1. CountDownLatch 2. CyclicBarrier 3. Semaphore 4. Exchanger 5. txt java 并发工具 通俗理解 CountDownLatch 等A ...

  8. C# HTTP系列10 form表单的enctype属性

    系列目录     [已更新最新开发文章,点击查看详细] 在ASP.NET编程中经常遇到下面的代码片段,将人员信息以表单方式提交到后台程序并保存到服务器与数据库中. <form action=&q ...

  9. 深入学习 esp8266 wifimanager源码解析(打造专属自己的web配网)

    QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 废话少说,本篇博文的目的就是深入学习 WifiManager 这个gi ...

  10. [翻译 EF Core in Action 2.4] 加载相关数据

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...