第七章 面向对象(5):组合

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()  # 调用组合对象的方法

猜你喜欢

转载自www.cnblogs.com/py-xiaoqiang/p/11210432.html