Python 程序设计任务式教程课件 单元5 面向对象编程_第1页
Python 程序设计任务式教程课件 单元5 面向对象编程_第2页
Python 程序设计任务式教程课件 单元5 面向对象编程_第3页
Python 程序设计任务式教程课件 单元5 面向对象编程_第4页
Python 程序设计任务式教程课件 单元5 面向对象编程_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象编程Python程序设计任务式教程——单元5学习目标

知识目标(1)理解面向对象编程的思想。(2)理解封装、继承和多态三大特性。能力目标(1)掌握封装、继承和多态三大特性。(2)能正确定义类和类的成员。(3)能以继承方式表示实际问题中的种类。素质目标(1)学会探索事物的组成规律。(2)形成面向对象的思维。任务CONTENTS2扩展购物车功能1创建文创商品对象01创建文创商品对象【任务描述】

之前开发“文创宝盒”系统时,商品信息都是用容器数据类型来存储的。在引入类这一概念后,遵循“一切皆对象”的理念,可以使用文创商品对象来保存相关商品数据,还可以在商品对象中进一步整合商品操作的相关行为。想要达到这一目的,就需要掌握类与对象。5.1类与对象的基础应用类是Python中定义对象的蓝图或模板。它定义了一组属性和方法,这些属性和方法描述了类的实例(对象)应该具有的特征和行为。对象是类的实例。通过类创建对象,每个对象都有自己的状态(属性值)和行为(方法)。对象是类的具体表现形式。可以有多个对象由同一个类实例化而来,每个对象可以有不同的属性值。Python通过类、对象、继承、多态等机制形成了一个完善的面向对象编程体系。

5.1.1类的定义基本的数据类型可以用来表示简单的信息,而组合数据类型可以在一定程度上存储更加丰富的信息。如果要表达更加复杂的信息,并且还需要包含一些操作,就可以使用类来实现。以文创商品为例,每个商品都有商品名称、商品价格、商品简介等信息。可以用列表来表示每个商品的信息。但是这样做的话,在引用时会带来不便,有时某些信息缺失了也很难发现,比如下面的b产品并不存在商品简介这个信息,并且相关的操作不能放在列表中。a

=

['',

13,

'']b

=

['',

10]5.1.2对象的创建与使用类如同模具,而对象如同用模具制作完成的饼干。类就是对象的模板,而一个对象就是类的一个实例。前面已经介绍了类的定义,那么如何使用类来定义对象呢?定义类后,创建对象的过程就称为类的实例化。可以用类名加圆括号的方式创建一个Book对象,例如:b

=

Book()5.2类的成员“类体”中主要有两大部分:数据部分和操作数据部分。数据部分实际和变量类似,会在首次被赋值时创建,在类中称为属性,而操作数据的部分就是定义在类中的函数,称为方法。默认情况下,它们可以在类的外部被访问或调用,但是考虑到数据的安全,有时会将其设置为私有成员,从而限制类外部对其的访问或调用。5.2.1构造方法和析构方法1.无参构造方法在创建类时,类通常会自动创建一个__init__()方法。构造方法会在类实例化的时候自动调用,不需要显式调用。每当创建一个类的新实例时,如果用户没有重新定义构造方法,则系统自动执行默认的构造方法__init__(),以进行一些初始化操作。例如,实例化类Book时,对应的__init__()方法就会被调用。5.2.1构造方法和析构方法2.带参数的构造方法在初始化对象时,通常会给对象赋初值,此时,带参数的构造方法就很有用处了。构造方法可以定义任意数量的参数,参数通过__init__()方法传递到类的实例化操作上。带参数的构造方法的第一个参数必须是名为self的变量。class

Book:

#

带参数的构造方法

def

__init__(self,

title,

author):

self.title

=

title

self.author

=

author5.2.1构造方法和析构方法3.使用带参数的构造方法实例化对象定义完构造方法后,在实例化对象时,就可以使用带参数的构造方法。book1

=

Book('Python程序设计',

'ZHENGHUI')5.2.1构造方法和析构方法4.访问和修改对象中的成员访问对象实质上是访问对象的成员,使用“.”运算符来实现访问。#

访问属性的值print(book1.title)

#

输出:Python程序设计#

修改属性的值book1.title

=

'Python实例教程'5.2.1构造方法和析构方法5.析构方法与构造方法对应,析构方法是在类销毁时自动执行的操作。每个类都默认有一个析构方法,即__del__()方法。如果一个类中显式地定义了__del__()方法,那么销毁该类的对象时会调用显式定义的__del__()方法。可以在这个方法中编写代码,进行一些释放资源的操作。5.2.2实例属性和类属性

1.实例属性在类的方法中定义的属性称为实例属性,如__init__()方法中创建的属性就是实例属性。

例如,所有的Book对象都有title和author属性,但是不同Book对象的title和author属性的值不同。除了在类的定义中创建属性,Python还支持在类的定义外动态添加实例属性。5.2.2实例属性和类属性

2.类属性类属性是指所有对象都有相同属性值的属性,类属性可在类内部、方法外部中创建。3.实例属性与类属性的区别这里用一个例子来说明实例属性与类属性的区别。4.使用__dict__查看属性想要查看某个类或对象的所有属性,可以使用__dict__。5.2.2实例属性和类属性

类属性含义__module__类定义所在的模块__dict__类的字典属性__doc__类的文档字符串__name__类的名字类属性含义__base__类的第一个父类__bases__类所有父类构成的元组__class__实例对应的类其中__name__属性很常见,常有以下结构:if

__name__

==

"__main__":

它用于判断当前模块是否为主程序入口。具体来说,当一个Python文件被直接运行时,__name__属性会被设置为"__main__";而当该文件被作为模块导入其他文件时,__name__属性会被设置为模块的名称。5.2.3实例方法

1.声明方法

声明方法和声明函数一样,语法格式如下:def

方法名(self,[形式参数列表]):

pass

#方法体5.2.3实例方法

2.调用方法

声明方法后就可以调用方法了。可以在声明方法的类中调用该方法,调用方式和使用函数是一致的。也可以在此类的外部调用该方法,语法格式如下:对象名.方法名(参数列表)5.2.3实例方法

3.双下画线方法

上面的例子中使用info()方法来显示图书的状态信息,而之前我们经常使用print()来输出各种基本类型的信息。:5.2.3实例方法

4.方法对象:一般情况下,方法在绑定后立即被调用。例如:book1.borrow_book()但是方法并不是必须立即被调用的。book1.borrow_book是一个方法对象,可以被保存起来之后再被调用。5.2.4类方法和静态方法

1.类方法类方法由所有对象共享。类方法定义在类的内部,其语法格式如下:@classmethoddef

类方法名(cls):

pass

#方法体类方法中参数列表的第1个参数为cls,代表类本身,而不是类的实例,它会在类方法被调用时自动接收由系统传递的调用该方法的类。类方法可以访问和修改类状态,而不需要访问实例状态。类方法可以通过类或对象调用,一般以类名调用。5.2.4类方法和静态方法

2.静态方法一些类的主要作用就是充当工具,这种类称为工具类。例如数据访问类,它的主要作用就是实现对数据库的访问。在工具类中,需要定义一些与类无关的方法,也就是不需要使用类成员的方法,这种方法称为静态方法。静态方法也定义在类的内部,其语法格式如下:@staticmethoddef

静态方法名():

pass

#方法体5.2.4类方法和静态方法

3.自由方法自由方法是一种非常特殊的方法,没有self、cls这样的参数,也没有装饰器;可以在类外部定义,也可以在类内部定义。如果定义在类外部,可以在类内部作为静态方法引用;如果定义在类内部,用法和静态方法类似。5.2.4类方法和静态方法对比项调用方式参数要求操作对象实例方法对象调用第一个参数必须是self所有的属性和方法类方法类和对象都可调用第一个参数必须是cls可以操作类属性和类方法静态方法类和对象都可调用可以没有参数可以操作类属性和类方法自由方法类调用可以没有参数所有的属性和方法5.3封装封装是面向对象编程的重要特性之一,其基本思想是对外隐藏类的细节,提供用于访问类成员的公开接口,这样可以在一定程度上保护类内数据的安全。大多数Python代码都遵循这样一个约定:用在类成员的名称前添加双下画线(__)的方式来表示私有成员。__属性名__方法名【任务实施】

在开发“文创宝盒”系统时,运用商品对象来存储商品,并合理利用各种方法,从而实现更复杂的功能。定义商品类,该类包含商品的相关属性,如商品编号、商品名称、商品价格、商品数量、商品种类等,同时定义计算商品总价的方法和输出商品信息的方法。(1)定义商品类及其主要属性。class

Product:

def

__init__(self,

product_id,

name,

price,

stock,

category):

"""初始化商品属性"""

duct_id

=

product_id

=

name

self.price

=

price

self.stock

=

stock

self.category

=

category【任务实施】

(2)定义计算商品总价的方法和输出商品信息的方法。

def

calculate_total_price(self):

"""计算商品总价"""

return

self.stock

*

self.price

def

display_info(self):

"""输出商品信息"""

return

(f'商品编号:

{duct_id}\n'

f'商品名称:

{}\n'

f'商品数量:

{self.stock}\n'

f'商品价格:

{self.price}\n'

f'商品种类:

{self.category}\n'

f'总价:

{self.calculate_total_price()}')【任务实施】

(3)定义修改商品数量的方法,bool参数的作用是判断是增加还是减少商品库存。

def

update_quantity(self,

quantity,

bool):

"""更新商品的库存"""

if

bool:

self.stock

-=

quantity

else:

self.stock

+=

quantity【任务实施】

(4)测试商品类。#

创建一个商品对象product1

=

Product(product_id='W1016',

name='志犹学海明信片套装',

stock=81,

price=32.0,

category='明信片')#

输出商品信息print(product1.display_info())#

计算并输出商品总价total_price

=

product1.calculate_total_price()print(f"商品总价:

{total_price}")【任务实施】

扩展购物车功能【拓展训练】

在创建了商品对象后,创建的用户类主要包含以下属性和方法。Ÿ用户名。Ÿ密码。Ÿ用户积分。Ÿ修改密码方法。Ÿ查询用户积分方法。02扩展购物车功能【任务描述】

在“文创宝盒”系统中,可以通过继承创建不同类型的购物车以扩展购物车的功能。例如,可以有一个基础的购物车类ShoppingCart,然后根据不同的需求创建子类,如折扣购物车类DiscountedCart或配送服务类PremiumCart。5.4继承继承的类称为派生类或子类,被继承的类称为基类或父类。如果一个派生类继承一个基类,那么这个派生类会从其基类中继承得到几乎所有的属性、方法。值得注意的是,基类中的构造方法和析构方法是不会被继承的。5.4.1单继承单继承是指定义的子类只有一个父类。要实现继承,需要在声明类时,在类名后加上一对圆括号,并在圆括号中标示要继承的类(父类)。子类继承父类的一般格式如下:class

子类名(父类名):

pass

#子类成员5.4.1单继承SubClass就是BaseClass的子类。子类将包含父类的所有非私有属性和方法,以及子类为其自身定义的任何其他属性和方法。这样,子类就有两种有效类型:子类的类型和其父类的类型。class

BaseClass:

passclass

SubClass(BaseClass):

pass5.4.2多重继承Python还支持多重继承。多重继承是指子类继承多个类,这样可以简化重复操作,其语法格式如下:class

类名(父类1[,父类2...]):

pass#子类成员5.4.3重写为了使调用print()显示的信息有意义,重写了__str__()方法,这个方法原本在其父类object中已经预定义了。这种在子类中按照自己的需求对父类同名方法进行修改的行为就叫作重写。5.4.4运算符重载运算符重载是指赋予内置运算符新的功能,使内置运算符能适应更多的数据类型。前面已经介绍过双下画线方法,每个双下画线方法都有不同的功能。若想自定义类实现某些操作,只需要重写某个特殊方法,就和__str__()方法一样。如果想要自定义类以支持运算符“+”操作,只需要重写相对应的__add__()方法。5.5多态多态是面向对象编程中的又一个重要的特征。简单来说,多态就是“相同的表达式,不同的操作”,也可以说成“相同的命令,不同的操作”。多态的意义在于,它实现了接口重用。接口重用带来的好处是程序更易于扩展,代码重用更加方便、更灵活,能真实地反映现实世界。

多态还可以理解为同一个方法被不同的对象调用时,能产生不同的行为。5.6对象与字典的转换1.使用__dict__属性或vars()函数完成对象与字典的转换在Python中,每个对象都有一个__dict__属性。该属性是一个字典,包含对象的所有属性和方法。可以利用这个属性来实现对象与字典的转换。

除了直接访问对象的__dict__属性之外,还可以使用内置函数vars()来获取对象的属性字典。vars()函数接收一个对象作为参数,并返回该对象的__dict__属性的内容。5.6对象与字典的转换2.使用字典推导式完成对象到字典的转换

可以使用字典推导式来手动将对象的属性转换为字典。这种方法比较灵活,可以根据自己的需求选择包含哪些属性或者对属性进行进一步处理。5.7面向对象编程思想面向对象的编程方法是目前主要使用的编程方法,其核心是面向对象的编程思想。【任务实施】

使用继承的方法来扩展购物车的功能。(1)ShoppingCart是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论