目录

  • 单元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.2 类与对象

(二)类/对象的创建、使用

OOP的方法:

(1)创建类及其派生类的属性、事件和方法。

(2)利用类创建对象。

(3)为对象设置各种属性。

(4)为对象设定相关事件。

(5)为事件设计相应的方法。

(6)利用图形用户界面(Graphical User  Interface,GUI),完成对象之间的相互调用,并实现最终的应用程序。

  1. 类:一组性质相同的对象的统一抽象描述。即:对象的数据、对象的操作事件以及事件的处理方法等。类是对象的抽象描述。

例如:按钮类的抽象信息:

按钮的数据:数据定义为宽、高和名称。数据默认值定义为:宽为30个像素,高为10个像素,名称为“按钮”。

按钮的操作事件:对按钮进行的操作。如:单击。

事件的处理方法:单击按钮之后,需要做的具体处理方法。如:单击按钮之后,显示信息“欢迎使用Python!”。每一种处理方法对应一个函数。 

根据上述描述,可以定义一个拥有具体数据(宽、高和名称)、默认数据(30、15、按钮)、确定操作事件(单击)以及相应操作方法的按钮类。

显然,用户可以使用按钮类,创建进行操作控制的按钮(对象),且只需给出宽、高和名称三个数据,然后编写相应的处理程序即可。

2. 对象

对象:客观存在的事物(拥有具体内容的类)。即:对象是拥有具体数据和确定操作及其方法的类的实例。对象是具体的类,类的实例。

例如:创建能够进行加法运算的按钮对象。只需要给出宽、高和名称的数据:50、20、“加法运算”,然后编写一个进行加法运算的方法(函数)add()。

3. 属性

属性:描述对象的数据。不同的对象可以定义不同的属性。

例如:按钮类的宽、高和名称是按钮对象的属性,不同的属性可以定义不同的按钮。

即:分别利用数据:40、20、“确定”和40、20、“取消”,则可以定义了两个按钮:“确定”按钮和“取消”按钮。

创建类可以使用class。

class 类名:

    属性1=值1

    ……

    属性n=值n

    方法1

    ……

    方法m

属性:对应相应的变量。

方法:对应相应的函数。

创建对象可以使用类名来实现。即:

对象=类名([ 参数 [,…,参数 ] ])

利用dir(),可以查看类和对象的属性和方法。

 class testc:

    x=10

    y=20

    def fu1(self):

        return self.x+self.y

    def add(u,v):

        return u+v

    def fu2(self,w):

        return self.x+w

>>> dir(testc)

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add', 'fu1', 'fu2', 'x', 'y']

>>> tc=testc()

>>> dir(tc)

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add', 'fu1', 'fu2', 'x', 'y']

思考:如果把上述类中的add()方法,改为如下内容,结果如何:

def add(self,u,v):

    return u+v

提示:在设计类的方法时,通常把self作为第一个参数。

注意:以双下划线开头的属性和方法,只能在类(对象)的内部使用,属于局部属性和局部方法,不能在类(对象)外使用。

例6.2:创建一个正方形类squa,属性边长为length,默认值为10,方法为周长squazc();然后创建正方形对象sq;最后利用sq输出正方形的边长和周长。

#pro0602.py

class squa:

    length=10

    def squazc(self):

        return 4*self.length

sq=squa()

print('正方形的边长:',sq.length)

print('正方形的周长:',sq.squazc())

在基类的基础上,创建子类的方法:

class 子类(基类):

    属性1=值1

    ……

    属性n=值n

    方法1

    ……

    方法m    

属性和方法:子类的属性和方法。在子类中,可以使用基类的属性和方法(继承性)。

例6.3:在正方形类squa的基础上,创建长方形类rect(子类),基类的边长作为长方形的长边;在子类中添加新属性width(默认值:20)作为宽边;在子类中添加的新方法为长方形周长rectzc();然后创建长方形对象re;最后利用re输出长方形的边长和周长。

#pro0603

class squa:

    length=10

    def squazc(self):

        return 4*self.length

class rect(squa):

    width=20

    def rectzc(self):

        return 2*(self.length+self.width)    

re1=rect()

print('长方形的长和宽:',re1.length,re1.width)

print('长方形的周长:',re1.rectzc())

显然,在长方形类rect中,使用了正方形类squa中属性length。

注意:self是类的默认对象,代表当前对象自身。在创建方法时,如果使用了对象自己的属性和方法,则需要传递self。

二、类和对象的使用

类的使用:使用类创建对象。

例如:在例6.2和例6.3中,分别使用正方形类和长方形类,依次创建了正方形对象sq和长方形对象re。

对象的使用:利用对象访问对象的属性和方法。即:

对象.属性

对象.方法

引用对象的属性和方法,需要使用原点“.”,表明对象与属性,对象与方法之间的隶属关系。

在使用对象时,不但可以直接使用对象属性和方法的默认值,而且还可以给属性赋予新的数据。

例6.4 利用正方形类squa和长方形类rect,输出默认边长和周长,以及修改属性值之后的边长和周长

#pro0604

class squa:

    length=10

    def squazc(self):

        return 4*self.length

class rect(squa):

    width=20

    def rectzc(self):

        return 2*(self.length+self.width)

sq1=squa()

print('正方形默认值:')

print('正方形的边长:',sq1.length)

print('正方形的周长:',sq1.squazc())

sq1.length=60

print('正方形修改后:')

print('正方形的边长:',sq1.length)

print('正方形的周长:',sq1.squazc())

re1=rect()

print('长方形默认值:')

print('长方形的长和宽:',re1.length,re1.width)

print('长方形的周长:',re1.rectzc())

re1.length=30

re1.width=90

print('长方形修改后:')

print('长方形的长和宽:',re1.length,re1.width)

print('长方形的周长:',re1.rectzc())