python组合

一:组合基础使用

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

image

继承:满足什么是什么的关系,is-a的关系 继承是一把双刃剑,单继承能实现就尽量少的继承,并不是继承的越多越好,反而越多找起来越繁琐

image

示例1:
class Foo:
    def __init__(self,name):
        self.name = name
        
class Bar():
    def __init__(self,n):
		self.n = n
        
obj = Foo(10)
obj1 = Bar(20)

该方法叫组合
一个对象拥有一个属性x,该属性的值是另一个对象,这就叫组合
obj.x = obj1

组合 将obj1的属性和方法赋值给了obj.x 所以输出结果相同
obj.x可以使用obj1的属性和方法
print(obj1.n)  输出结果: n:20
print(obj.x.n)  输出结果: n:20
        
字典添加值
print(obj.__dict__['x'])
 创建k:v
 obj.x = 1
 打印obj.x的名称空间
 print(obj.x.__dict__)   输出结果: {'m': 10, 'x': 1}

二:组合

示例2:选课系统
类  学生 课程 老师

学生类
class People():
    school = 'SH'

    def __init__(self, name, age, gender, ):
        self.name = name
        self.age = age
        self.gender = gender
        
课程类
class Course():
    def __init__(self, name, period, price):
        self.name = name
        self.period = price ,
        self.period = period
        
    课程
python = Course('python', '6mon', 10000)
linux = Course('linux', '5mon', 20000)

        多继承
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,)



创建对象
stu = Student('lv', 20, 'male')
将课程对象有一个属性,该属性的值是另一个对象添加到列表里面
一个对象拥  这就是组合
stu.courses.append(python.name)  输出结果:python
stu.courses.append(linux.name)   输出结果:linux
 组合 将linux的属性和方法赋值给了stu.courses
 循环取出列表
for course in stu.courses:
    print(course.name)    输出结果:python  linux
 老师        多继承
class Teacher(People, Course):
    def __init__(self, name, age, gender, level):
        self.level = level
        super().__init__(name, age, gender, )

tea = Teacher('ly', 19, 'male', 10)
 这就是组合的概率
一个对象拥有一个属性,该属性的值是另一个对象
tea.course = linux
打印老师教的课程
print(tea.course.name)   输出结果:linux
posted @ 2021-12-07 22:39  AlexEvans  阅读(150)  评论(0编辑  收藏  举报