主要内容:
- 小目标:掌握组合
- 主要内容:组合概念,组合优缺点,组合使用场景
1. 组合:
基本概念:一个对象使用其他对象属性及方法; 组合优点:
功能拆分,
模块化降低代码耦合度,
增加程序的扩展性
组合与继承区别:
组合是不同对象之间关系;
继承是类之间关系,父类与子类
简单理解: 组合我们一直在使用,比如在一个类中使用数字,列表等;
这就属于最常见的组合;
2. 组合例子
使用班级管理学生,具体实现步骤如下:
2.1 代码实现思路:
面向对象编程思路:
确认类名,属性,方法将类属性,
根据功能定义方法及参数;
具体方法实现;
代码测试;
代码整合;
2.2 班级与学生角色
功能拆分,定义学生类与班级类:
- 学生:
学生属性:序号,姓名,年龄;
学生行为:对属性设置,学习; 角色与功能分析
- 班级:
班级属性:班级好,学生数量;
班级行为:添加学生,删除学生,查找学生;
2.3 学生类定义:
代码如下:
class Student:
#对象属性初始化
def __init__(self, name, age, num):
pass
#开始学习某个科目
def study(self, subject):
pass
#设置学号
def set_num(self, num):
pass
#获取学号
def get_num(self):
pass
#其他属性可以通过方法进行设置
- 问题:属性可以直接访问与修改,为什么加方法?
理解封装,对象的属性一般使用方法访问或修改
2.4 班级类实现:
几个问题:
班级如何管理学生?通过列表或者字典管理;
班级如何查找学生?遍历字典或者列表;
班级提供管理方法?增加,删除,修改,清空;
班级类定义:
#class是Python中关键字,所以不能作为变量名
class Team:
def __init__(self, cname):
pass
#添加学生
def add_student(self, stu):
pass
#查找学生信息
def find_student_by_num(self, num):
pass
注意:好的命名规则,增加代码的可读性,便于维护;
学生类与班级类实现:
根据需求,完成每个方法,并根据实际情况对代码进行修改;
最终代码实现: 学生类:
class Student:
#对象属性初始化
def __init__(self, name, age, num):
self.name = name
self.age = age
self.num = num
pass
#开始学习某个科目
def study(self, subject):
print("study:", subject)
#设置学号
def set_num(self, num):
self.num = num
#获取学号
def get_num(self):
return self.num
#测试
stu = Student('sun', 12, 1)
stu.study('chinese')
print(stu.get_num())
结果:
study: chinese
1
班级类实现:
import random
#class是Python中关键字,所以不能作为变量名
class Team:
def __init__(self, cname):
#使用列表管理学生
self.stulist = []
self.cname = cname
#添加学生
def add_student(self, stu):
print("add student num:", stu.get_num())
self.stulist.append(stu)
#根据学号查找学生
def find_student_by_num(self, num):
for stu in self.stulist:
if stu.get_num() == num:
#找到后返回学生对象
return stu
#统计学生数量
def get_student_count(self):
return len(self.stulist)
#创建班级,001
team = Team('001')
for i in range(10):
#创建学生对象
stu = Student('name_%d'%i, random.randint(10,12), i)
#添加学生
team.add_student(stu)
#查看学生数量
print('student nums:',team.get_student_count())
#查找学生
stu = team.find_student_by_num(2)
print(stu.get_num())
结果:
add student num: 0
add student num: 1
add student num: 2
add student num: 3
add student num: 4
add student num: 5
add student num: 6
add student num: 7
add student num: 8
add student num: 9
student nums: 10
2
以上就是一个简单的类组合,理解下班级对象与学生对象之间关系。