目录

  • 单元1  初识Python
    • ● 任务 1.1  计算机程序设计语言概述
    • ● 任务 1.2 Python语言
    • ● 任务1.3 Python开发环境搭建
    • ● 任务 1.4 Python的简单使用
    • ● 知识拓展
    • ● 思考与练习
  • 单元2   Python基础知识
    • ● 任务2.1 Python程序基本结构
    • ● 任务2.2  标准输入输出
    • ● 任务2.3  Python对象
    • ● 任务2.4 Python变量
    • ● 任务2.5  数据类型
    • ● 任务2.6 字符串
    • ● 任务2.7 运算符
    • ● 知识拓展
    • ● 思考与练习
  • 单元3   程序流程控制
    • ● 任务3.1  顺序结构
    • ● 任务3.2 选择结构
    • ● 任务3.3  循环结构
    • ● 知识拓展
    • ● 思考与练习
  • 单元4  Python序列
    • ● 任务4.1  序列
    • ● 任务4.2 列表
    • ● 任务4.3  用于序列操作的常用内置函数
    • ● 任务4.4   元组
    • ● 任务4.5  字典
    • ● 任务4.6  集合
    • ● 知识拓展
    • ● 思考与练习
  • 单元5  函数
    • ● 任务5.1 函数的定义与调用
    • ● 任务5.2 函数的参数
    • ● 任务5.3   参数类型
    • ● 任务5.4  变量作用域
    • ● 任务5.5   嵌套调用与递归调用
    • ● 任务5.6  lambda表达式
    • ● 任务5.7  模块
    • ● 知识拓展
    • ● 思考与练习
  • 单元6  异常处理
    • ● 任务6.1 异常处理的基本概念
    • ● 任务6.2 Python的异常处理语句
    • ● 任务6.3  自定义异常
    • ● 知识扩展
    • ● 思考与练习
  • 单元7  文件操作
    • ● 任务7.1  文件的分类
    • ● 任务7.2  文件对象
    • ● 任务7.3  文本文件
    • ● 任务7.4  二进制文件
    • ● 知识拓展
    • ● 思考与练习
  • 单元8  面向对象程序设计
    • ● 任务8.1 面向对象技术的基本概念
    • ● 任务8.2 类与对象
    • ● 任务8.3 类的继承
    • ● 任务8.4 方法重写
    • ● 知识扩展
    • ● 思考与练习
  • 单元9  网络编程基础
    • ● 任务9.1  Socket概述
    • ● 任务9.2   Socket对象内建方法
    • ● 任务9.3  Socket编程实例
    • ● 任务9.4    PythonInternet模块
    • ● 知识扩展
    • ● 思考与练习
  • 单元10    Python标准库及第三方库
    • ● 任务10.1 Python标准库
    • ● 任务10.2 Python第三方库的下载及安装
    • ● 任务10.3  Python第三方库举例
    • ● 知识扩展
    • ● 思考与练习
  • 任务11 用户图形界面(GUI)
    • ● 任务11.1 图形用户界面概述
    • ● 任务11.2 窗体容器和组件
    • ● 任务11.3 界面布局管理
    • ● 任务11.4 文本框组件
    • ● 任务11.5 其他组件
    • ● 任务11.6菜单与对话框
    • ● 任务11.7 鼠标键盘事件
    • ● 知识扩展
    • ● 思考与练习
  • 任务12   Python操作数据库
    • ● 数据库基础
    • ● 结构化查询语言SQL
    • ● Python操作数据库核心API
    • ● Python操作数据库案例
    • ● sqlite3 实训练习案例
    • ● pymysql 数据库实训案例
    • ● 小结  思考与练习
  • 习题解析(线上作业等参考解答)
    • ● 第一单元 初识Python  作业
    • ● 第二单元  Python基础(作业)
    • ● 第三单元  程序流程控制 作业(1)
    • ● 第三单元  程序流程控制  作业(2)
    • ● 第四单元  Python序列   作业
    • ● 第五单元   函数   作业
    • ● 单元六  异常处理  作业
    • ● 单元七、八  文件操作,GUI,面向对象
    • ● 单元九   网络编程基础
    • ● 线上习题解析
    • ● 编程训练
  • 应用题解(综合编程技术)
    • ● 《食品识别小专家》
    • ● 格式输出
    • ● 习题选解
    • ● 每日一帖
    • ● 模拟基本信息
    • ● 模拟基本数据
    • ● 数制转换
    • ● 定制每日运动计划
    • ● 《简易购物系统》
  • 课程章节测验
    • ● 第1次章节测验
  • 复习
    • ● Python基础知识总结
  • 第三方库TOOLS(备用)
    • ● 库模块(可下载)
    • ● 供考查备用的库模块(可下载)
任务8.1 面向对象技术的基本概念

知   识   要   点

面向对象、类、对象、事件、方法

程序设计分为面向过程程序设计和面向对象程序设计。

面向过程程序设计:用户为了实现具体的编程任务,使用程序语言的语句直接设计每一个(求解)过程的程序设计方法。例如:前述方法。

面向对象程序设计(Object Oriented Programming,OOP):利用程序语言的类(系统提供,或用户定义),创建相应的对象,实现相应的程序设计。

面向对象程序设计与面向过程程序设计的区别:设计人员在进行面向对象程序设计时,不再是单纯地从代码的第一行直到最后一行进行繁琐的逐句编程,而是考虑如何利用类创建对象,再利用对象来简化程序设计,提供代码的可重用性,而不需要考虑类和对象本身的具体程序设计问题。

对象(实例):由数据及能对其实施的操作所构成的封装体

类:类描述了对象的特征(数据和操作)

面向对象程序设计:以数据为中心的程序设计方式,隐藏数据细节,更接近自然思考方式。

面向过程程序设计:以功能为中心的程序设计方式,需要数据细节。


一、OOP特性

类和对象的封装性、继承性和多态性等。从而使OOP具有易理解性、可重用性、可扩展性、隐藏性、高安全性和易管理维护等优点。

抽象(Abstraction)与封装(Encapsulation)

抽象是指对现实世界问题和实体的本质表现;问题分解成数据和数据上的操作

封装是将程序具体的实现细节进行隐藏的一种机制

抽象是抽取现实问题和实体的本质,封装是将这些本质包装起来进行内部实现

例6.1 创建一个窗口win,窗口内含一个按钮bt和一个标签lb;定义按钮的单击事件click,单击按钮之后,在标签中显示“Happy You!”,同时弹出一个信息窗口,信息窗口的内容为“Welcome…”。

#pro0601.py

import tkinter

import tkinter.messagebox

win=tkinter.Tk()

win.title('欢迎')

win.geometry('300x200+260+160')

def click():

    lb.config(text='Happy You!')

    tkinter.messagebox.showinfo(title='信息',message='Welcome...')

bt=tkinter.Button(win,text='单击',width=20,command=click)

bt.place(x=80,y=60)

lb=tkinter.Label(win,text='单击按钮试试...')

lb.place(x=110,y=110)

win.mainloop

思考:单击“单击”按钮之后,使按钮的标题显示为“测试结束!”,且使按钮无效。

提示:在click函数体内,添加如下语句:

    bt.config(text='测试结束!')

    bt.config(state='disabled')

在图6.1中,单击“单击”按钮之后,弹出的窗口如图6.2和图6.3所示。

根据例6.1的设计过程和运行结果,不难看出,利用14行语句就完成了满足要求的程序设计。这就是使用OOP的优势。

如果使用面向过程的程序设计方法,来完成该例的任务,则可能需要几百行语句。

OOP的过程:利用类创建对象,确定对象的属性,设置发生的事件,设计处理方法等。

即:类 → 对象 → 属性 → 事件 → 方法。

  1. 封装性

    封装:把对象的属性、事件和方法封装起来组合在一起构成类。封装意味着类和对象应具有明确的功能,并且提供与其它类和对象的接口。

    封装性:让用户忽略类和对象复杂的内部细节,使用户集中精力使用类和对象的属性、事件和方法。

    封装后的类和对象的代码将处于隐藏和保护状态,从而使得程序更加安全和稳定。

    在例6.1中,使用了模块 tkinter中封装的三个类 。即:

    窗口类Tk()、按钮类Button()和标签类Label()等。

    不难看出,封装使对象可以像一个可拆卸的部件,在程序之间调用,从而减少程序的复杂性。

    同一个类的所有对象使用相同的数据结构、属性、事件和方法,但每个对象都拥有各自的数据。定义一个类就相当于在程序中加入了一个新的数据类型,并且要求编译程序将它视为程序语言的内部数据类型。

    编译程序将它视为程序语言的内部数据类型。

  2. 继承性

    继承性:在系统提供的基本类(即:基类)的基础上,建立用户自己的派生类(子类),子类将继承基类的所有属性、事件和方法,同时又可以继续建立自己新的派生类属性、事件和方法。

    利用继承性可以避免相同内容的重复出现,且能够节省大量的时间和存储空间。通过继承可以从一个类派生出另一个新的派生类,而派生类,又可以派生出它的派生类,如此下去可以建立一个复杂的类的层状结构,给复杂程序设计带来了方便。


    因此,继承性有三个主要优点:

    (1)允许建立类的层状结构(树状结构)。

    (2)派生类可以继承基类的属性、事件和方法。

    (3)派生类可以添加自己的属性、事件和方法,且一旦建立将永久有效(持久性)。

  3.  多态性

    多态性:不同类和对象中的属性、事件和方法,可以提供相同的名字,且同名的属性、事件和方法所指的内容可以不同。

    在调用同名的属性、事件和方法时,既可以使对象具有不同的性质和功能,也可以使对象具有相同的性质和功能。即:不同的类和对象,可以使用同名的属性、事件和方法。

    多态是创建类时一种极为有效的手段。多态可以使用户对具有相同功能的属性、事件和方法,采用统一标准进行命名。

    例如:在例6.1中,按钮类Button()和标签类Label,均定义了width和height属性,分别代表按钮的宽和高、标签的宽和高。

    注意:二者的长度单位在不同环境下可能会不一样。