《Python程序设计基础》-课件 项目七 Python 面向对象_第1页
《Python程序设计基础》-课件 项目七 Python 面向对象_第2页
《Python程序设计基础》-课件 项目七 Python 面向对象_第3页
《Python程序设计基础》-课件 项目七 Python 面向对象_第4页
《Python程序设计基础》-课件 项目七 Python 面向对象_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

任务1认识类对象和实例对象01任务2认识属性02任务3认识方法03282任务4认识继承04任务5认识可迭代对象——迭代器和生成器05任务1

认识类对象和实例对象2831. 了解对象的定义。2. 了解面向对象的特性。3. 了解类和实例的定义及使用。4. 能正确使用类对象和实例对象。任务目标284一、对象的定义所谓对象,从概念层面来看,是对某种事物的抽象表示(包含功能和属性)。抽象可以分为两个方面:数据抽象和过程抽象。数据抽象定义了对象的属性,而过程抽象定义了对象的操作。相关知识285在面向对象的程序设计中,强调将数据(属性)和操作(服务)融合成一个不可分割的单元,即对象。外部使用对象时,只需知道它的功能,而不必了解内部的实现细节。在规范层面,对象是一系列可被其他对象使用的公共接口,实现了对象间的交互。从编程语言的角度,对象将数据和代码(程序)封装在一起,实现了信息的隐藏。通过类创建的实例被称为对象。类和对象的关系类似汽车的设计图纸与实际汽车的关系。设计图纸(类)本身并不具备可用性,只有通过图纸制造出来的汽车(对象)才能被使用。这种模型能够帮助开发者更好地组织和管理代码,实现代码的重用和扩展。286二、面向对象的特性1. 封装封装是面向对象的主要特性,是指把客观事物抽象并封装成对象,即将数据成员、属性、方法和事件等集合在一个整体内。通过访问控制还可以隐藏内部成员,但只允许可信的对象访问或操作部分数据或方法。封装保证了对象的独立性,可以防止外部程序破坏对象的内部数据,同时便于对程序维护和修改。2872. 继承继承是面向对象的程序设计中代码重用的主要方法。继承允许使用现有类的功能,并在无须重新改写原来类的情况下对这些功能进行扩展。继承可以避免代码复制和相关的代码维护等问题。2883. 多态性派生类继承了基类的所有非私有数据和行为,同时能够定义自己的新数据和行为。因此,派生类拥有两个有效的类型:自身的类型以及它所继承的基类的类型。这种特性使得一个对象可以展现出多种不同类型的能力,这被称为多态性。通过继承,派生类能够在已有基础之上,扩展和定制基类,同时可以添加新的属性和方法。多态性则使得可以在不同的上下文中使用相同的对象,从而实现更灵活和通用的代码设计。多态性能够在运行时自动地选择适当的方法或行为,从而提高代码的可扩展性和可维护性。289三、类的定义类使用关键字class声明。类的声明格式如下。class类名:类体其中,类名为有效的标识符,通常由多个单词组成,每个单词的首字母大写,其余字母小写,这有助于提高代码的可读性和可维护性。类体是由缩进的一系列语句组成的块。290在类体内部定义的元素被视为类的成员。类的主要成员可以分为两种类型:描述状态的数据成员(也称为属性)和描述操作的函数成员(也称为方法)。值得注意的是,Python中的class语句实际上是一个复合语句,它不仅定义了一个类,更是在Python解释器执行时创建了一个类对象。这个类对象可以看作一个模板,根据这个模板可以创建出许多实例,每个实例都具有类定义中所描述的属性和方法。这种面向对象的思想为代码的设计和组织提供了更加灵活和可复用的方式。291四、实例的定义类是抽象的,如果要使用类定义的功能,就必须实例化类,即创建类的对象。在创建实例对象后,可以使用“.”运算符来调用其成员。注意:创建类的对象、创建类的实例、实例化类等说法是等价的,都是以类为模板生成了一个对象。实例对象的调用格式如下。anObject=类名(参数列表)anObject.对象函数或anObject.对象属性292Python创建对象的方法无须使用关键字new,而是直接像调用函数一样调用类对象并传递参数,因此,类对象是可调用对象。在Python内置函数中,bool、int、str、list、dict、set等均为可调用内置类对象,在有的场合也称之为函数,如使用str函数把数值“123”转换成字符串的形式“str(123)”。293五、类对象和实例对象的使用访问类的成员(属性和方法)主要有两种方式:使用类对象和使用实例对象。1. 使用类对象访问成员当使用类对象访问成员时,可以直接通过类名访问类的属性和方法。这样的访问方式适用于类的静态属性和静态方法,它们不依赖于实例对象的创建。这种方式更适合处理类级别的数据或方法。2942. 使用实例对象访问成员当创建类的实例对象后,可以使用实例对象访问实例属性和实例方法。实例对象可以拥有自己的属性值,同时可以访问类的属性和方法。这种方式更适合处理实例特定的数据和方法。295任务2

认识属性2961. 熟悉实例属性和类属性的概念,并能正确区分。2. 了解私有属性和公有属性的区别。3. 了解@property修饰器的作用。4. 能正确使用类属性和实例属性。任务目标297在一个类中,数据成员是指在类定义内部声明的成员变量,也称为域。这些成员变量用来存储描述类特征的值,即属性。属性可以通过该类中定义的方法进行访问,同时可以通过类对象或实例对象进行访问。属性实际上就是在类中的变量,而在Python中,变量不需要预先声明,可以直接使用。建议在类定义的开始位置初始化类对象的属性,或者在类的构造函数(通常是__init__()方法)中初始化实例对象的属性。这样可以确保在使用类或实例时,属性已经有了初始值,避免在使用过程中出现调用属性值错误等问题。相关知识298299一、实例属性通过“self.变量名”定义的属性称为实例属性,也称为实例变量。类的每个实例都包含了该类的实例变量的一个单独副本,实例变量属于特定的实例。实例变量在类的内部通过self访问,在类的外部通过对象实例访问。实例属性一般在__init__()方法中通过如下形式初始化。__init__()为类的初始化函数,用于定义初始化程序或变量。self.实例变量名=初始值在其他实例函数中通过self访问,具体如下。self.实例变量名=值

#写入self.实例变量名

#读取或者在创建实例后通过实例访问,具体如下。obj1=类名()

#创建实例obj1.实例变量名=值

#写入obj1.实例变量名

#读取300301二、类属性在Python中,开发者可以声明属于类对象本身的变量,即类属性,也称为类变量或静态属性。与实例属性不同,类属性属于整个类,而不是特定实例的一部分,这意味着所有从该类创建的实例共享同一个属性副本。无论创建了多少个实例,这种属性的值对于该类的所有实例都是相同的。这种在类级别定义的属性通常用于存储与整个类相关的常量、配置信息或者共享数据。通过在类定义内部直接声明,可以在所有实例中方便地访问和使用这些属性,而不必为每个实例分别定义相同的值。这样一来,类对象属性提供了一种有效的方式来管理和维护类级别的数据。类属性一般在类体中通过如下形式初始化。类变量名=初始值在其定义的方法中或外部代码中通过类名访问,具体如下。类名.类变量名=值

#写入类名.类变量名

#读取注意:类属性如果通过“obj.属性名”来访问,则属于该类的实例属性。虽然类属性可以使用实例来访问,但容易造成困惑,所以建议用户不要这样使用,而是使用标准的访问方式“类名.类变量名”。302303三、私有属性和公有属性Python类的成员没有访问控制限制,这与其他面向对象程序设计语言不同。Python通常约定以两个下画线开头,但是不以两个下画线结束的属性是私有的,其他为公有的。尽管Python并没有严格的访问控制机制,但是约定是很重要的,在编写代码时尽量遵循这些约定,以便提高代码的可读性和可维护性。注意:不能直接访问私有属性,但可以在方法中访问。304四、@property修饰器面向对象编程的封装性原则强调不直接访问类中的数据成员,在Python中可以通过定义私有属性来实现,并且可以编写相应的用于访问这些私有属性的函数,用@property修饰器修饰这些函数。这种方式允许程序将这些函数当作属性来访问,从而提供了更加友好和灵活的访问方式。@property修饰器的默认行为是提供只读属性,这意味着开发者可以通过这些访问器函数读取属性的值,但不能直接对属性进行修改。如果有需要,还可以使用对应的getter、setter和deleter修饰器实现其他类型的访问器函数。通过这些修饰器,可以更精细地控制属性的读取、修改和删除操作,同时能在属性被访问或修改时执行一些额外的操作,以实现更丰富的数据管理和封装。305任务3

认识方法3061. 了解方法的概念。2. 熟悉常用的方法并能灵活运用。3. 了解方法的重载。4. 能正确定义和使用方法。任务目标307一、实例方法一般情况下,类方法的第一个参数一般为self,这种方法称为实例方法。实例方法对类的某个给定的实例进行操作,可以通过self显式地访问该实例。实例方法的声明格式如下。def方法名(self,[形参列表]):函数体相关知识308实例方法的调用格式如下。对象.方法名([实参列表])虽然类方法的第一个参数为self,但调用时用户不需要也不能给该参数传递值。事实上,Python会自动把实例传递给该参数。注意:Python中的self等价于C++中的self指针和Java、C#中的this关键字。虽然没有限制第一个参数名必须为self,但建议遵循惯例,这样便于阅读和理解,且集成开发环境也会提供相应的支持。309310二、静态方法Python允许声明与类的实例无关的方法,即静态方法。静态方法不对特定实例进行操作,在静态方法中访问实例会导致错误。静态方法通过修饰器@staticmethod定义,其声明格式如下。@staticmethoddef静态方法名([形参列表]):函数体静态方法一般通过类名访问,也可以通过实例调用。其调用格式如下。类名.静态方法名([实参列表])311三、类方法在Python中可以声明属于类本身的方法,即类方法。不同于普通的实例方法,类方法不会对特定的实例进行操作。在类方法中尝试访问对象实例会导致错误。为了定义类方法,需要使用修饰器@classmethod,并将第一个形参设置为类对象本身,通常命名为cls。类方法的声明格式如下。@classmethoddef类方法名(cls,[形参列表]):函数体类方法一般通过类名访问,也可以通过实例调用。312其调用格式如下。类名.类方法名([实参列表])注意:尽管类方法的第一个参数被命名为cls,但在调用时,用户不需要也不能给该参数传递值。Python会自动将类传递给这个参数。类和实例不同。在Python中,类本身也被视为对象。当调用子类继承自父类的类方法时,传递给cls的是子类对象,而不是父类对象。313四、__new__()方法和__init__()方法在Python的类体中,还可以定义一些特殊的方法,如__new__()方法和__init__()方法。__new__()方法是一个类方法,在创建对象时被调用,它返回当前对象的一个实例。通常情况下,不需要重载这个方法,因为Python会自动处理对象的创建过程。__init__()方法即构造函数(构造方法),用于在对象创建完成后进行初始化工作。该方法在对象被创建后立即调用,它负责初始化当前对象的实例属性等。该方法没有返回值。314五、__del__()方法__del__()方法即析构函数(析构方法),用于实现销毁类的实例所需的操作,如释放对象占用的非托管资源(如打开的文件、网络连接等)。默认情况下,当对象不再被使用时运行__del__()方法。由于Python解释器实现自动垃圾回收,所以无法明确这个方法究竟在什么时候运行。通过del语句可以强制销毁一个实例,从而保证调用实例的__del__()方法。315六、私有方法和公有方法与私有属性类似,Python约定以两个下画线开头,但不以两个下画线结束的方法是私有的,其他为公有的。以双下画线开始和结束的方法是Python专有的方法。注意:不能直接访问私有方法,但可以在其他方法中访问。316七、方法的重载在许多程序设计语言中方法可以重载,即可以定义多个重名的方法,只要保证方法签名是唯一的即可。方法签名包括3个部分,即方法名、参数数量和参数类型。Python本身是动态语言,方法的参数没有声明类型(在调用传值时确定参数的类型),参数的数量由可选参数和可变参数控制,故Python对象方法不需要重载,定义一个方法即可实现多种调用,从而实现相当于其他程序设计语言的重载功能。注意:在Python类体中定义多个重名的方法虽然不会报错,但只有最后一个方法有效,因此建议不要定义重名的方法。任务4

认识继承3171. 了解派生类的使用方法。2. 了解查看继承层次关系的方法。3. 了解类成员的继承和重写。4. 能正确使用继承。任务目标318一、派生类Python支持多重继承,即一个派生类可以继承多个基类。派生类的声明格式如下。class派生类名(基类1,[基类2,…]):类体其中,派生类名后为所有基类的名称元组。如果在类定义中没有指定基类,则默认其基类为object。object是所有对象的根基类,定义了公用方法的默认实现,如__new__()方法。相关知识319320二、查看继承的层次关系多个类的继承可以形成层次关系,通过类的方法mro()或类的属性__mro__可以输出其继承的层次关系。三、类成员的继承和重写通过继承,派生类继承基类中除构造方法之外的所有成员。如果在派生类中重新定义从基类继承的方法,则在派生类中定义的方法将覆盖从基类中继承的方法。任务5

认识可迭代对象——迭代器和生成器3211. 了解可迭代对象的定义。2. 了解迭代器的作用。3. 熟悉生成器函数并能正确使用。任务目标322可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,Python提供了定义迭代器和生

温馨提示

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

评论

0/150

提交评论