四时宝库

程序员的知识宝库

python笔记30:一个例子搞定-类设计与组合

主要内容:

  • 小目标:掌握组合
  • 主要内容:组合概念,组合优缺点,组合使用场景

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

以上就是一个简单的类组合,理解下班级对象与学生对象之间关系。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接