类的组合

news2024/11/25 17:22:10

目录

一、什么是组合

二、为什么用组合

三、如何用组合


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502

一、什么是组合

  • 组合就是一个类的对象具备某一个属性,该属性的值是指向另外外一个类的对象

二、为什么用组合

  • 组合是用来解决类与类之间代码冗余的问题
  • 首先我们先写一个简单版的选课系统
class OldboyPeople:
    school = 'oldboy'

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


class OldboyStudent(OldboyPeople):
    def __init__(self, name, age, sex, stu_id):
        OldboyPeople.__init__(self, name, age, sex)
        self.stu_id = stu_id

    def choose_course(self):
        print('%s is choosing course' % self.name)


class OldboyTeacher(OldboyPeople):
    def __init__(self, name, age, sex, level):
        OldboyPeople.__init__(self, name, age, sex)
        self.level = level

    def score(self, stu, num):
        stu.score = num
        print('老师[%s]为学生[%s]打分[%s]' % (self.name, stu.name, num))


stu1 = OldboyStudent('tank', 19, 'male', 1)
tea1 = OldboyTeacher('nick', 18, 'male', 10)
stu1.choose_course()

tank is choosing course

tea1.score(stu1, 100)

老师[nick]为学生[tank]打分[100]

print(stu1.__dict__)

{'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1, 'score': 100}

  • 如上设计了一个选课系统,但是这个选课系统在未来一定是要修改、扩展的,因此我们需要修改上述的代码

三、如何用组合

  • 需求:假如我们需要给学生增添课程属性,但是又不是所有的老男孩学生一进学校就有课程属性,课程属性是学生来老男孩后选出来的,也就是说课程需要后期学生们添加进去的
  • 实现思路:如果我们直接在学生中添加课程属性,那么学生刚被定义就需要添加课程属性,这就不符合我们的要求,因此我们可以使用组合能让学生未来添加课程属性


class Course:
    def __init__(self, name, period, price):
        self.name = name
        self.period = period
        self.price = price

    def tell_info(self):
        msg = """
        课程名:%s
        课程周期:%s
        课程价钱:%s
        """ % (self.name, self.period, self.price)
        print(msg)


class OldboyPeople:
    school = 'oldboy'

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


class OldboyStudent(OldboyPeople):
    def __init__(self, name, age, sex, stu_id):
        OldboyPeople.__init__(self, name, age, sex)
        self.stu_id = stu_id

    def choose_course(self):
        print('%s is choosing course' % self.name)


class OldboyTeacher(OldboyPeople):
    def __init__(self, name, age, sex, level):
        OldboyPeople.__init__(self, name, age, sex)
        self.level = level

    def score(self, stu, num):
        stu.score = num
        print('老师[%s]为学生[%s]打分[%s]' % (self.name, stu.name, num))

# 创造课程
python = Course('python全栈开发', '5mons', 3000)
python.tell_info()

课程名:python全栈开发
        课程周期:5mons
        课程价钱:3000

linux = Course('linux运维', '5mons', 800)
linux.tell_info()

课程名:linux运维
        课程周期:5mons
        课程价钱:800

# 创造学生与老师
stu1 = OldboyStudent('tank', 19, 'male', 1)
tea1 = OldboyTeacher('nick', 18, 'male', 10)
  • 组合
# 将学生、老师与课程对象关联/组合
stu1.course = python
tea1.course = linux
stu1.course.tell_info()

课程名:python全栈开发
        课程周期:5mons
        课程价钱:3000

tea1.course.tell_info()

课程名:linux运维
        课程周期:5mons
        课程价钱:800

  • 组合可以理解成多个人去造一个机器人,有的人造头、有的人造脚、有的人造手、有的人造躯干,大家都完工后,造躯干的人把头、脚、手拼接到自己的躯干上,因此一个机器人便造出来了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/867970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode[1122]数组的相对排序

难度:Easy 题目: 给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。 对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现…

从Spring源码看Spring如何解决循环引用的问题

Spring如何解决循环引用的问题 关于循环引用,首先说一个结论: Spring能够解决的情况为:两个对象都是单实例、且通过set方法进行注入。 两个对象都是单实例,通过构造方法进行注入,Spring不能进行循环引用问题&#x…

【果树农药喷洒机器人】Part7:静态PWM变量喷药实验

文章目录 一、引言二、静态PWM变量喷药实验2.1搭建喷药实验平台2.2变量喷药控制实验 一、引言 为综合评估所设计的果树喷药机器人变量喷药效率和质量,验证系统的控制性能和实际作业的可行性,本章开展果树变量喷药实验。首先,通过静态的PWM变…

x11 gtk qt gnome kde 之间的区别和联系

Linux 下的图形库介绍 一、Linux 图形领域的基础设施 1.1 X Window X Window从逻辑上分为三层:X Server、X Client和X协议。 最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将…

CTF之逆向之阿里巴巴

题目地址:http://www.shiyanbar.com/ctf/13 题目预览: 解题过程: 1、下载附件发现是exe文件 2、使用PEid和Detect It Easy查壳 和 开发语言,发现没有加壳,都是用C#开发的 3、C#和Java Python属于解释型语言&#xff…

互联网医院办理|沈阳互联网医院|医疗行业新机遇

互联网医院的办理不仅能为人们带来更便利、高效的医疗服务,更能缓解医疗资源紧张的问题,推动医疗服务的质量和效率提升。在这个充满信息化和科技变革的时代,互联网医院无疑是医疗行业向前迈进的重要一步。 1、提供全天候的医疗服务&#xff1…

spring的aop动态代理对象注入时机

bean生命周期: bean实例化populateBean填充属性invokeAwareMethods调用aware方法postProcessBeforeInitialization后置处理器before方法initializeBean初始化beanpostProcessAfterAfterInitialization后置处理器after方法 代理对象注入有两种情况:提前和…

RAM不够?CUBEIDE使用CCMRAM

RAM不够?使用CCMRAM 文章目录 RAM不够?使用CCMRAM打开连接LD文件:添加代码添加标识宏使用 打开连接LD文件: 添加代码 在SECTIONS段最后加上下面代码: _siccmram LOADADDR(.ccmram); /* CCM-RAM section * * IMPORTAN…

C++11语法笔记

文章目录 一.类中新增的默认成员函数:移动赋值和移动构造二.lambda表达式三.包装器bind函数 一.类中新增的默认成员函数:移动赋值和移动构造 二.lambda表达式 三.包装器 bind函数

spss数据分析--相关性分析与酷炫图

相关性分析与酷炫图 今天就来说说R语言怎么进行相关性分析。 首先,安装两个R包,其中“corrplot”包就能画出好多酷炫的相关性矩阵图。“pheatmap”包是用来画热力图的。 我们调用R里自带的数据集,今天调用的这个是关于汽车道路测试的各项指标…

【力扣每日一题】2023.8.12 合并K个升序链表

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个链表数组,数组里的链表都是升序的,让我们合并这些链表,要求合并之后还是升序的。 最简…

倒数纪念日-生日提醒事项时间管理倒计时软件

倒数纪念日​​​​​​​是一款功能强大的时间管理、事项提醒软件。帮你更好的管理倒数日、纪念日、生日、节假日、还款日等各种重要日子,通知提醒,让你不再错过生命中的每一个重要日子。 【功能简介】 分类管理:倒数日、纪念日、自定义分类…

aardio 调用 python pickle load 数据

aardio 调用 python pickle load 词典数据 dump_pickle.py import os import sys import time import pickle from readmdict import MDX, MDDos.chdir("/mdict")mdxfile "your.mdx" if not os.path.exists(mdxfile):print("{mdxfile} not found!&…

uniapp 自定义手机顶部状态栏不生效问题

想要的效果想淘宝一样,底色覆盖到手机顶部,找了两天都没找到原因,过程很艰苦,直接上结果吧 项目是后来接手的,最终原因出在这, "immersed" : false>设置为 true 就可以了,沉浸式样…

学习pytorch1环境安装

学习pytorch 1. 环境安装配置镜像源conda命令记录图像相关代码遇到的问题1. torch.cuda.is_available() False 1. 环境安装 B站小土堆视频 配置镜像源 conda config --show channels conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main…

刷题记录(2023-08-12)

1. 小美的排列询问 AC代码&#xff1a; #include <iostream> #include <vector> using namespace std;int main() {int n;cin >> n;vector<int> nums(n);int a, b;for (int i 0; i < n; i) {cin >> nums[i];}cin >> a >> b;for…

javaScript:for循环的认识与使用,以及奇葩for循环

目录 前言 基本的 for 循环通常有三个关键组成部分 一.javaScript中的循环都有那些&#xff08;补充&#xff09; 二.for循环​ 语法/理解​ 执行过程&#xff08;重点&#xff09;​ 注意 三. 基本for循环小练习 1.求1-100的偶数和&#xff0c;包含1和100 2.求1-100中…

DOM的节点操作+事件高级+DOM事件流+事件对象

一.节点操作 1.父节点: node.parentNode 得到的是离元素最近的父级节点 2.子节点: parentNode.childNodes 所有的子节点 包含元素节点 文本节点等等parentNode.children (非标准) 获取所有的子元素节点,实际开发常用 parentNode.firstChild 获取…

JAVA基础补充(Comparable排序接口的实现)

JAVA基础补充&#xff08;Comparable排序接口的实现&#xff09; Comparable接口的实现&#xff1a;没有实现Comparable接口时&#xff0c;取出来的值无法排序如果进行排序&#xff1a;实现接口进行排序&#xff1a;Controller层的实现实体类的实现 复习时间&#xff1a;2023/0…

Spring Cloud面试突击班1

Spring Cloud面试突击班1 1.Spring Cloud 中有哪些组件&#xff0c;整个项目架构中我们的重点又有哪些&#xff1f; Spring Cloud 是一套基于Spring Boot的微服务解决方案。 Spring Cloud生态在国内主流的分为两套&#xff0c;一套是以奈飞开源的Spring Cloud Netfilx 20%&a…