# 组合

### 一，解决类与类之间代码允余问题有两种方案：  1，继承    2，组合

1，继承：描述的是类与类之间，什么是什么的关系

2，组合：描述的是类与类之间的关系，是一种什么有什么关系

``` 1 class Date:
2     def __init__(self,year,mon,day):
3         self.year = year
4         self.mon = mon
5         self.day = day
6
7     def tell_birth(self):
8         print('出生年月日<%s-%s-%s>' % (self.year, self.mon, self.day))
9
10 class OldboyPeople:
11     school = 'oldboy'
12
13     def __init__(self, name, age, sex):
14         self.name = name
15         self.age = age
16         self.sex = sex
17
18 class OldboyTeacher(OldboyPeople):
19     def __init__(self,name,age,sex,level,salary):
20         super().__init__(name,age,sex)
21         self.level=level
22         self.salary=salary
23
24     def change_score(self):
25         print('teacher %s is changing score' %self.name)
26
27 class Oldboystudent(OldboyPeople):
28     def __init__(self,name,age,sex,course,):
29         super().__init__(name,age,sex,)
30         self.course=course
31
32     def choose(self):
33         print('student %s choose course' %self.name)
34
35
36 tea1=OldboyTeacher('egon',18,'male',9,3.1)
37 date_obj=Date(2000,1,1)
38 # date_obj.tell_birth()
39
40 tea1.birth=date_obj
41 # print(tea1.birth)
42 # tea1.birth.tell_birth()
43 # tea1.change_score()
44
45 stu1=Oldboystudent('张三',16,'male','linux')
46 stu1.birth=Date(2002,3,3)
47 stu1.birth.tell_birth()```

### 二，组合练习：

``` 1 class OldboyPeople:
2     school = 'oldboy'
3
4     def __init__(self, name, age, sex,):
5         self.name = name
6         self.age = age
7         self.sex = sex
8
9 class OldboyTeacher(OldboyPeople):
10     def __init__(self,name,age,sex,level,salary):
11         super().__init__(name,age,sex)
12         self.level=level
13         self.salary=salary
14
15         self.courses=[]
16
17     def change_score(self):
18         print('teacher %s is changing score' %self.name)
19
20     def tell_course_info(self):
21         print(('老师%s 教授的课程信息如下' %self.name).center(50,'='))
22         for course_obj in self.courses:
23             course_obj.info()
24
25
26 class Oldboystudent(OldboyPeople):
27     def __init__(self,name,age,sex):
28         super().__init__(name,age,sex,)
29         self.courses=[]
30
31     def choose(self):
32         print('student %s choose course' %self.name)
33
34     def tell_course_info(self):
35         print(('学生%s 学习的课程信息如下' % self.name).center(50, '='))
36         for course_obj in self.courses:
37             course_obj.info()
38
39 class Course:
40     def __init__(self,cname,period,price):
41         self.cname=cname
42         self.period=period
43         self.price=price
44
45     def info(self):
46         print('课程信息<名字：%s 周期：%s  价钱：%s>' %(self.cname,self.period,self.price))
47
48
49 tea1=OldboyTeacher('egon',18,'male',9,3.1)
50 stu1=Oldboystudent('张三',16,'male')
51
52 python=Course('Python全栈开发','5mons',3000)
53 linux=Course('Linux高级架构师','5mons',2000)
54 go=Course('Go开发工程师','3mons',1000)
55
56
57 # # 给老师添加课程
58 # tea1.courses.append(python)
59 # tea1.courses.append(linux)
60
61 # print(tea1.courses)
62 # tea1.courses[0].info()
63 # for course_obj in tea1.courses:
64 #     course_obj.info()
65
66 # tea1.tell_course_info()
67
68
69 # 给学生添加课程
70 stu1.courses.append(python)
71 stu1.courses.append(go)
72 stu1.courses.append(linux)
73 stu1.tell_course_info()```

0 条评论

• ### Python实现最大堆（大顶堆）

Python自带的heapq模块实现的是最小堆，没有提供最大堆的实现。虽然有些文章通过把元素取反再放入堆，出堆时再取反，把问题转换为最小堆问题也能间接实现最大堆...

• ### 数据结构之——Python实现循环队列

栈是先入后出，与之相反的是队列，队列是先进先出的线性结构。队列是只允许在一端进行插入操作，而在另一端进行删除操作的线性表。允许插入的一端称为队尾，允许删除的一端...

• ### Python Day7

是一种新建类的方式，新建的类称为子类，子类会遗传父亲的属性，可以减少代码冗余 在python当中，子类（派生类）可以继承一个或多个父类（基类，超类）

• ### Python实现最大堆（大顶堆）

Python自带的heapq模块实现的是最小堆，没有提供最大堆的实现。虽然有些文章通过把元素取反再放入堆，出堆时再取反，把问题转换为最小堆问题也能间接实现最大堆...

• ### python笔记：线程

2 锁 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([timeout]) #释放 mutex.release...

• ### python模块:win32com用法详解

import win32com from win32com.client import Dispatch, constants

• ### 从PEP-8学习Python编码风格

Python3中应当总是使用UTF-8。（Python2使用ASCII。）在使用了规定编码后不需要再声明文件编码。

• ### python第四十二课——__str__(self)函数

4.__str__(self): 作用： 创建完对象，直接打印对象名/引用名我们得到的是对象的内存信息(十六进制的地址信息)， 这串数据我们程序员并不关心...

• ### python面向对象基础

面向过程的程序设计的核心是过程，过程即解决问题的步骤，面向过程的设计就好比精心设计好一条流水线，考虑周全什么时候处理什么东西。