组合

一,解决类与类之间代码允余问题有两种方案:  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模块实现的是最小堆,没有提供最大堆的实现。虽然有些文章通过把元素取反再放入堆,出堆时再取反,把问题转换为最小堆问题也能间接实现最大堆...

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

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

    py3study
  • Python Day7

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

    py3study
  • Python实现最大堆(大顶堆)

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

    py3study
  • 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。)在使用了规定编码后不需要再声明文件编码。

    py3study
  • python pyqt5 QComboBox下拉列表框 常用

    addItem() addItems() clear() count() currentText() currentIndex()

    用户5760343
  • python第四十二课——__str__(self)函数

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

    hankleo
  • python面向对象基础

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

    菲宇

扫码关注云+社区

领取腾讯云代金券