第8篇:模板与实例——面向对象编程入门(上)python中文编程

作者: 中文编程倡导者------ 李金雨
联系方式: wbtm2718@qq.com
系列: python中文编程入门教程

** 核心理念: AI时代必须使用中文编程,母语编程阅读效率极高"

第8篇:模板与实例------面向对象编程入门(上)

开篇引入

本课目标

  • 理解什么是模板(类)和实例(对象)
  • 掌握为什么要使用模板
  • 掌握如何定义模板(class)
  • 掌握如何创建实例(对象)
  • 理解成员数据(属性)的概念和使用
  • 理解成员功能(方法)的概念和使用
  • 理解self参数的含义

生活场景引入

同学们,在日常生活中,我们经常会遇到一些具有共同特征的事物:

  • 饼干店里的饼干都是用同一个模具做出来的
  • 小区里的房子都是按照同一套图纸建造的
  • 孩子们用乐高积木拼出来的模型都是按照说明书搭建的

在Python中,我们可以使用类(模板)来描述这些具有共同特征的事物,然后创建对象(实例)来表示具体的个体。面向对象编程让我们可以更自然地模拟现实世界中的事物。

预期成果展示

在本课结束时,你将能够:

  • 定义自己的类(模板)
  • 创建类的实例(对象)
  • 给类添加成员数据和成员方法
  • 访问和修改对象的属性
  • 调用对象的方法
  • 编写一个学生类和一个动物类

概念讲解

1. 什么是模板(类)和实例(对象)

模板(类):是一种抽象的描述,定义了一组属性和方法,用于创建具有共同特征的对象。

实例(对象):是根据类创建的具体个体,具有类定义的属性和方法。

生活例子

  • 模板就像饼干模具,实例就像具体的饼干
  • 模板就像建筑图纸,实例就像建好的房子
  • 模板就像乐高说明书,实例就像拼好的模型

代码示例

python 复制代码
# 定义一个学生模板(类)
class 学生:
    """学生模板,用于创建学生实例"""
    pass

# 创建学生实例(对象)
学生一 = 学生()
学生二 = 学生()

print(学生一)
print(学生二)

2. 为什么要用模板

使用模板(类)有以下好处:

  • 代码复用:可以创建多个具有相同结构的对象
  • 数据封装:将数据和操作数据的方法封装在一起
  • 逻辑清晰:使代码更加结构化和易于理解
  • 便于维护:修改类的定义会影响所有实例

生活例子

  • 饼干模具可以做出很多相同形状的饼干
  • 建筑图纸可以用来建造多栋相同的房子
  • 乐高说明书可以用来拼出多个相同的模型

3. 定义模板(class)

在Python中,我们使用class关键字来定义类。

基本结构

python 复制代码
class 类名:
    """类的说明文档"""
    # 类的属性和方法

模板命名规范

  • 类名应该使用中文名词
  • 类名的首字母应该大写(大驼峰命名法)

代码示例

python 复制代码
# 定义学生模板
class 学生:
    """学生模板,用于创建学生实例"""
    pass

# 定义动物模板
class 动物:
    """动物模板,用于创建动物实例"""
    pass

# 定义汽车模板
class 汽车:
    """汽车模板,用于创建汽车实例"""
    pass

4. 创建实例(对象)

创建实例(对象)的过程称为实例化,语法为实例名 = 类名()

实例命名规范

  • 实例名应该使用中文名词
  • 实例名应该小写

代码示例

python 复制代码
# 创建学生实例
学生一 = 学生()
学生二 = 学生()

# 创建动物实例
狗 = 动物()
猫 = 动物()

# 创建汽车实例
轿车 = 汽车()
卡车 = 汽车()

print(学生一)
print(狗)
print(轿车)

5. 成员数据(属性)

成员数据是类中定义的变量,用于存储对象的状态。

定义成员数据

python 复制代码
class 学生:
    """学生模板"""
    def __init__(self, 姓名, 年龄):
        """初始构造功能"""
        self.姓名 = 姓名
        self.年龄 = 年龄
        self.成绩 = 0

访问和修改成员数据

python 复制代码
# 访问成员数据
print(学生一.姓名)
print(学生一.年龄)

# 修改成员数据
学生一.成绩 = 95
print(学生一.成绩)

生活例子

  • 学生的姓名、年龄、成绩
  • 动物的名称、年龄、种类
  • 汽车的品牌、颜色、速度

代码示例

python 复制代码
# 定义学生模板
class 学生:
    """学生模板"""
    def __init__(self, 姓名, 年龄):
        """初始构造功能"""
        self.姓名 = 姓名
        self.年龄 = 年龄
        self.成绩 = 0

# 创建学生实例
学生一 = 学生("张三", 15)
学生二 = 学生("李四", 16)

# 访问成员数据
print(学生一.姓名, 学生一.年龄, 学生一.成绩)
print(学生二.姓名, 学生二.年龄, 学生二.成绩)

# 修改成员数据
学生一.成绩 = 95
学生二.成绩 = 88

print(学生一.姓名, "的成绩是:", 学生一.成绩)
print(学生二.姓名, "的成绩是:", 学生二.成绩)

6. 成员功能(方法)

成员功能是类中定义的函数,用于操作对象的状态。

定义成员功能

python 复制代码
class 学生:
    """学生模板"""
    def __init__(self, 姓名, 年龄):
        """初始构造功能"""
        self.姓名 = 姓名
        self.年龄 = 年龄
        self.成绩 = 0
    
    def 学习(self, 科目):
        """学生学习某个科目"""
        print(f"{self.姓名}正在学习{科目}")
    
    def 考试(self, 科目, 分数):
        """学生参加某科目的考试"""
        self.成绩 = 分数
        print(f"{self.姓名}的{科目}考了{分数}分")

调用成员功能

python 复制代码
# 调用成员功能
学生一.学习("数学")
学生一.考试("数学", 95)

self参数的含义

  • self是一个特殊参数,指向当前对象
  • 在方法内部,通过self访问对象的属性和方法
  • 调用方法时,不需要传递self参数

生活例子

  • 学生的学习、考试方法
  • 动物的吃、睡方法
  • 汽车的启动、加速方法

代码示例

python 复制代码
# 定义学生模板
class 学生:
    """学生模板"""
    def __init__(self, 姓名, 年龄):
        """初始构造功能"""
        self.姓名 = 姓名
        self.年龄 = 年龄
        self.成绩 = 0
        self.科目列表 = []
    
    # 成员功能
    def 学习(self, 科目):
        """学生学习某个科目"""
        self.科目列表.append(科目)
        print(f"{self.姓名}正在学习{科目}")
    
    def 考试(self, 科目, 分数):
        """学生参加某科目的考试"""
        self.成绩 = 分数
        print(f"{self.姓名}的{科目}考了{分数}分")
    
    def 显示信息(self):
        """显示学生的所有信息"""
        print(f"姓名:{self.姓名}")
        print(f"年龄:{self.年龄}岁")
        print(f"成绩:{self.成绩}分")
        print(f"学习的科目:{self.科目列表}")

# 创建实例
学生一 = 学生("张三", 15)
学生一.学习("数学")
学生一.学习("英语")
学生一.考试("数学", 95)
学生一.显示信息()

动手实践

基础练习(必做)

  1. 创建动物模板 :编写一个动物类,包含名称、年龄、声音,以及"叫"的功能

    python 复制代码
    # 动物模板
    class 动物:
        """动物模板"""
        def __init__(self, 名称, 年龄, 声音):
            """初始构造功能"""
            self.名称 = 名称
            self.年龄 = 年龄
            self.声音 = 声音
        
        def 叫(self):
            """动物发出叫声"""
            print(f"{self.名称}发出{self.声音}的叫声")
        
        def 显示信息(self):
            """显示动物信息"""
            print(f"名称:{self.名称}")
            print(f"年龄:{self.年龄}岁")
            print(f"叫声:{self.声音}")
    
    # 创建实例
    狗 = 动物("小狗", 2, "汪汪")
    猫 = 动物("小猫", 1, "喵喵")
    
    狗.叫()
    猫.叫()
    
    狗.显示信息()
    猫.显示信息()
  2. 创建汽车模板 :编写一个汽车类,包含品牌、颜色、速度,以及"加速"、"减速"功能

    python 复制代码
    # 汽车模板
    class 汽车:
        """汽车模板"""
        def __init__(self, 品牌, 颜色, 速度=0):
            """初始构造功能"""
            self.品牌 = 品牌
            self.颜色 = 颜色
            self.速度 = 速度
        
        def 加速(self, 增加速度):
            """汽车加速"""
            self.速度 += 增加速度
            print(f"{self.颜色}的{self.品牌}加速到{self.速度} km/h")
        
        def 减速(self, 减少速度):
            """汽车减速"""
            self.速度 = max(0, self.速度 - 减少速度)
            print(f"{self.颜色}的{self.品牌}减速到{self.速度} km/h")
        
        def 显示信息(self):
            """显示汽车信息"""
            print(f"品牌:{self.品牌}")
            print(f"颜色:{self.颜色}")
            print(f"当前速度:{self.速度} km/h")
    
    # 创建实例
    轿车 = 汽车("宝马", "红色")
    卡车 = 汽车("解放", "蓝色")
    
    轿车.加速(60)
    轿车.加速(30)
    轿车.减速(20)
    轿车.显示信息()
    
    卡车.加速(40)
    卡车.减速(10)
    卡车.显示信息()

进阶练习(选做)

  1. 创建书籍模板 :编写一个书籍类,包含书名、作者、价格,以及"显示信息"功能

    python 复制代码
    # 书籍模板
    class 书籍:
        """书籍模板"""
        def __init__(self, 书名, 作者, 价格):
            """初始构造功能"""
            self.书名 = 书名
            self.作者 = 作者
            self.价格 = 价格
        
        def 显示信息(self):
            """显示书籍信息"""
            print(f"书名:{self.书名}")
            print(f"作者:{self.作者}")
            print(f"价格:{self.价格}元")
    
    # 创建实例
    书1 = 书籍("Python编程:从入门到实践", "Eric Matthes", 89.0)
    书2 = 书籍("小王子", "安托万·德·圣-埃克苏佩里", 29.5)
    
    书1.显示信息()
    print("\n")
    书2.显示信息()
  2. 创建银行账户模板 :编写一个银行账户类,包含账户名、余额,以及"存款"、"取款"功能

    python 复制代码
    # 银行账户模板
    class 银行账户:
        """银行账户模板"""
        def __init__(self, 账户名, 余额=0):
            """初始构造功能"""
            self.账户名 = 账户名
            self.余额 = 余额
        
        def 存款(self, 金额):
            """存款"""
            self.余额 += 金额
            print(f"{self.账户名}存款{金额}元,当前余额:{self.余额}元")
        
        def 取款(self, 金额):
            """取款"""
            if 金额 <= self.余额:
                self.余额 -= 金额
                print(f"{self.账户名}取款{金额}元,当前余额:{self.余额}元")
            else:
                print(f"余额不足,当前余额:{self.余额}元")
        
        def 显示信息(self):
            """显示账户信息"""
            print(f"账户名:{self.账户名}")
            print(f"当前余额:{self.余额}元")
    
    # 创建实例
    账户1 = 银行账户("张三")
    账户2 = 银行账户("李四", 1000)
    
    账户1.存款(500)
    账户1.取款(200)
    账户1.显示信息()
    
    print("\n")
    
    账户2.取款(1500)
    账户2.取款(800)
    账户2.显示信息()

挑战练习(拓展)

  1. 创建学生管理系统 :编写一个学生管理系统,包含添加学生、显示学生信息、计算平均分等功能

    python 复制代码
    # 学生管理系统
    class 学生:
        """学生模板"""
        def __init__(self, 姓名, 年龄):
            """初始构造功能"""
            self.姓名 = 姓名
            self.年龄 = 年龄
            self.成绩字典 = {}
        
        def 添加成绩(self, 科目, 分数):
            """添加科目成绩"""
            self.成绩字典[科目] = 分数
        
        def 计算平均分(self):
            """计算平均分"""
            if not self.成绩字典:
                return 0
            return sum(self.成绩字典.values()) / len(self.成绩字典)
        
        def 显示信息(self):
            """显示学生信息"""
            print(f"姓名:{self.姓名}")
            print(f"年龄:{self.年龄}岁")
            print(f"成绩:{self.成绩字典}")
            print(f"平均分:{self.计算平均分():.2f}")
    
    class 学生管理系统:
        """学生管理系统"""
        def __init__(self):
            """初始构造功能"""
            self.学生列表 = []
        
        def 添加学生(self, 学生):
            """添加学生"""
            self.学生列表.append(学生)
            print(f"添加学生{学生.姓名}成功!")
        
        def 显示所有学生(self):
            """显示所有学生信息"""
            if not self.学生列表:
                print("没有学生信息")
                return
            
            for i, 学生 in enumerate(self.学生列表, 1):
                print(f"\n第{i}个学生:")
                学生.显示信息()
        
        def 计算班级平均分(self):
            """计算班级平均分"""
            if not self.学生列表:
                return 0
            
            总分数 = 0
            总科目数 = 0
            
            for 学生 in self.学生列表:
                总分数 += sum(学生.成绩字典.values())
                总科目数 += len(学生.成绩字典)
            
            if 总科目数 == 0:
                return 0
            
            return 总分数 / 总科目数
    
    # 测试学生管理系统
    系统 = 学生管理系统()
    
    # 添加学生
    学生1 = 学生("张三", 15)
    学生1.添加成绩("数学", 95)
    学生1.添加成绩("英语", 88)
    学生1.添加成绩("语文", 92)
    系统.添加学生(学生1)
    
    学生2 = 学生("李四", 16)
    学生2.添加成绩("数学", 85)
    学生2.添加成绩("英语", 90)
    系统.添加学生(学生2)
    
    # 显示所有学生
    系统.显示所有学生()
    
    # 计算班级平均分
    班级平均分 = 系统.计算班级平均分()
    print(f"\n班级平均分:{班级平均分:.2f}")

知识总结

核心概念回顾

  • 类(模板):定义对象的属性和方法的蓝图
  • 对象(实例):根据类创建的具体个体
  • 属性(成员数据):对象的状态信息
  • 方法(成员功能):对象的行为
  • self参数:指向当前对象的引用

关键代码速查

功能 代码 说明
定义类 class 类名: 代码块 定义一个类
初始化方法 def __init__(self, 参数): 代码块 初始化对象的属性
创建对象 对象名 = 类名(参数) 创建类的实例
访问属性 对象名.属性名 访问对象的属性
修改属性 对象名.属性名 = 值 修改对象的属性
定义方法 def 方法名(self, 参数): 代码块 定义类的方法
调用方法 对象名.方法名(参数) 调用对象的方法

常见错误提醒

  1. 缩进错误:类和方法的缩进不正确
  2. 参数错误__init__方法的参数不匹配
  3. self参数:方法定义时忘记添加self参数
  4. 属性访问:访问不存在的属性
  5. 命名错误:类名或方法名拼写错误

课后作业

巩固练习题

  1. 编写一个手机类,包含品牌、型号、价格,以及"打电话"、"发短信"功能
  2. 编写一个电脑类,包含品牌、型号、内存,以及"开机"、"关机"功能

创意编程题

  1. 编写一个图书馆类,包含书籍列表,以及"添加书籍"、"借出书籍"、"归还书籍"功能
  2. 编写一个学校类,包含学生列表和教师列表,以及"添加学生"、"添加教师"、"显示信息"功能

下篇预习提示

在下一篇中,我们将深入学习__init__方法,了解如何在创建对象时初始化其属性。请思考:

  • 如何在创建对象时设置默认值?
  • 如何验证输入的参数?
  • 如何在初始化时执行一些操作?

学习交流

如果你在学习过程中遇到任何问题,欢迎联系我:

  • ** 视频号,"时空系"
  • 邮箱: wbtm2718@qq.com
  • 其他提示:
  • 本人正在开发纯中文编程语言和编译器,有兴趣的可以交流
  • 本人正在写一本基于中国母语思维习惯的数学教材,可以让你一年内学完从初中到研究生的数学,而且可以让你快速掌握人工智能的关键数学知识,有兴趣的可以交流

祝你学习愉快!

相关推荐
她说彩礼65万1 小时前
C语言 动态内存管理
c语言·开发语言·算法
傻啦嘿哟1 小时前
管好PPT的“骨架”:用Python控制页面与文档属性
开发语言·javascript·c#
凤凰院凶涛QAQ1 小时前
《C++转java快速入手系列》类与对象篇
java·开发语言·c++
2301_766283441 小时前
C#怎么实现EF Core迁移 C#如何用Entity Framework Core进行数据库迁移和更新表结构【数据库】
jvm·数据库·python
a7963lin1 小时前
PHP怎么用array_unique去重数组元素【方法】
jvm·数据库·python
熊文豪1 小时前
FinceptTerminal 深度解析:用 C++20 + Qt6 + Python 打造的开源 Bloomberg 终端
python·开源·c++20·bloomberg·finceptterminal
故事还在继续吗1 小时前
常见的导致 coredump 的原因
开发语言·gdb
咸甜适中1 小时前
rust格式化输出(println!、format!、...)
开发语言·rust
CQU_JIAKE1 小时前
【a]4.25
开发语言