python面向对象之组合

面向对象 组合

#   组合 : 就是一个对象拥有一个属性,该属性的值是另外一个对象

					'对象.属性 = 另一个对象'
目的: 解决类与类之间的代码冗余问题
	1.继承:满足什么是什么的关系,is-a的关系  # (继承是一把双刃剑,并不是继承的多就好)
    2.组合:组合表达是has-a关系: 一个对象拥有一个属性,该属性值指向另外一个对象

eg:
class Foo():
    def __init__(self, m):
        self.m = m
class Bar():
    def __init__(self, n):
        self.n = n
obj = Foo(10)
obj1 = Bar(20)

obj.x = obj1  # 这就属于组合
print(obj.__dict__)   # {'m': 10, 'x': <__main__.Bar object at 0x000001B0B6CBA4E0>}

# 这样就可以通过obj对象即可以拿到Foo的属性和方法 也可以拿到Bar的属性属性和方法(超级对象)
class People():
    school = 'SS'
    
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
class Admin(People):
    pass

class Course():
    def __init__(self, name, period, price):
        self.name = name
        self.period = period
        self.price = price
python = Course('python', '6mon', 2000)
linux = Course('linux', '5mon', 3000)

class Student(People, Course):
    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.courses = course
        super().__init__(name, age, gender, )

    def choose_course(self, stu_obj, course):
        stu_obj.courses.append(course)

stu = Student('gary', 20 , 'male')  # 没有给course传值 所有为一个空列表
stu.courses.append(python)  # 这里就是组合 属性的值是另一个对象
stu.courses.append(linux)
 
for course in stu.courses:
    print(course.price) 
    print(course.name)
posted @ 2021-12-07 20:42  JasonBorn  阅读(155)  评论(0编辑  收藏  举报