7.8 组合
类的继承:什么是什么的关系
类的组合:什么有什么的关系
组合:给对象添加一个属性,让属性指向其他的对象,这样就可以通过这个属性直接调用指向的对象的属性。这种方式就是组合
class People: # 定义一个人类
school = 'a'
def __init__(self, name, age):
self.name = name
self.age = age
class Teacher(People): # 定义老师类继承人类
def __init__(self, name, age, level, salary): # 派生__init__方法
super().__init__(name, age)
self.level = level
self.salary = salary
def teach(self):
print('%s is teaching' % self.name)
class Student(People): # 定义学生类,继承人类
def __init__(self, name, age, number, classtime): # 派生__init__方法
super().__init__(name, age)
self.number = number
self.classtime = classtime
def learn(self):
print('%s is learning' % self.name)
class Course: # 定义学科类
def __init__(self, coursename, courseprice):
self.coursename = coursename
self.courseprice = courseprice
def tellinfo(self):
print('课程名:%s,课程价格:%s' % (self.coursename, self.courseprice, ))
t1 = Teacher('t1', 31, 10, 3000) # 实例化
s1 = Student('s1', 18, 1001, '08:30')
python = Course('python', 8500) # 实例化
linux = Course('linux', 5000)
# 由于学科不能和老师,学生是继承关系,而只是归属关系,所以用下面方式来处理
t1.course = python # 直接给对象添加一个course属性,然后course属性指向python对象 --> 这就是组合
s1.course = [] # 我们也可以让一个属性收纳很多对象
s1.course.append(python)
s1.course.append(linux)
# 下面输出相同的对象内存地址,说明都指向python对象
print(python)
print(t1.course)
print(s1.course)
# 这样也可以直接调用python对象的方法
t1.course.tellinfo() # 用组合调用python的方法
s1.course[0].tellinfo() # 调用组合对象的方法