一:组合基础使用
组合: 就是一个对象拥有一个属性,该属性的值是另一个对象
继承:满足什么是什么的关系,is-a的关系 继承是一把双刃剑,单继承能实现就尽量少的继承,并不是继承的越多越好,反而越多找起来越繁琐
示例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