Python程序设计项目化教程 课件 项目9-面向对象编程_第1页
Python程序设计项目化教程 课件 项目9-面向对象编程_第2页
Python程序设计项目化教程 课件 项目9-面向对象编程_第3页
Python程序设计项目化教程 课件 项目9-面向对象编程_第4页
Python程序设计项目化教程 课件 项目9-面向对象编程_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

——模块化编程e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC《项目九》知识技能树2341Contents目录面向对象的基本概念实例的创建和调用添加属性和方法类成员的封装e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC5类的继承和多态e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC1面向对象基本概念1.1什么是面向对象编程e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC所谓的面向对象,就是根据业务需求,将编程中涉及到被操作的对象抽象为类,然后在根据编程语言语法定义出类,并为类添加方法和属性,通过调用方法实现功能,访问属性实现数据读写。面向对象编程是一种思想,是一种更接近现实世界的编程思想。在现代编程中得到广泛的应用。目前全球的高级编程语言,除了C语言等极少数,绝大部分都支持面向对象编程思想。1.2什么是类e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC在编程中把具有相同特性和行为的对象抽象为类(class),并赋予相应的属性(property)和行为(method),再通过创建类的具体对象,并操作对象实现编程目标。总之,类(class)是具有相同特性(属性)对象的抽象(总称)。1.3什么是对象(实例)e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC对象(object)是类的具体化。比如,如果认为动物是一个类,那么猫、狗、狮子就是动物的具体化,就是对象(面向对象编程中往往叫实体,即instance,也叫实例)。所以,类是具有相同特性(属性)和行为(功能)的一类对象的总称(抽象),而对象(实例)则是类的具体化。1.4什么是属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC属性(property)是对象所拥有的特征(或属性)。比如,花的属性包括颜色、名称、开花时长、开花时间等。不同的花虽然具有这些共同的特性,但特性的值是不一样的,这就需要在创建具体对象的时候赋予不同对象不同的属性值,这样每个对象就具有各自的特征。属性是对象的特征,属性值是对象特征的具体数据表现。1.4什么是方法e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC方法(method)是对象具备的功能(或行为)。所谓的功能就是指对象能具体做什么。如人的行为包括,吃、喝、说、走、劳动等,鸽子的行为包括:飞、抓虫子、呼叫等等。需要注意的是,方法是一个过程(函数),属性是对象的某个特征。在面向对象编程中属性是用于保存对象的特性数据,而方法则是一段完成特定功能的代码集合。e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC2对应和创建类的(对象)实例2.1定义类e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFACPython中使用面向对象编程和其它语言类似。首先,需要定义被抽象编程对象为类,然后再创建类的对象实体,再操作对象实体,完成业务需求。所以,要使用面向对象编程思想,首先要定义类。Python中定义类的语法如下:

2.2创建对象和调用对象的方法和属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC(1)创建类的对象(实例)非常简单,基本语法如下:对象名称=类名(初始化参数)(2)调用对象的方法属性非常简单,如下:e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC3给类添加属性和方法3.1两种属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC面向对象编程中的属性有两种:对象属性:对象属性(也叫实例属性)是每个类对象单独拥有且其值可能不同的属性,如前面的_name属性,每个对象名字就不同;类属性:类属性是类的所有对象共享的属性且其值是相同的,如学生总数(count),平均年龄(avgAge)等属于所有学生共享的属性。3.2给类添加类属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC为类添加类属性有两种方式:(1)一种方式,就是在类定义中添加类属性并设置其初始值(2)另外一种方式,就是通过类名添加类属性和赋初值类属性可以通过“类名.类属性”方式访问,也可以通过“对象名.类属性名”方式访问。注意:Python中两种添加类属性的方式容易“混乱”,建议类属性均在类定义代码中添加。3.3给类添加对象属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC对象属性(也叫成员属性)是不同对象可以拥有不同属性值的属性。Python中添加对象属性也有两种方法:(1)一种是在类定义时添加属性并初始化,(2)另一种是在类的定义外部通过对象名添加属性并初始化。注意:(1)为类添加对象属性往往是在__init__方法中,该方法叫初始化方法(或构造方法),在创建类的对象实例时会自动被调用;(2)通过对象名添加属性只被该对象拥有,类的其它对象是“看不到的”;(3)推荐使用第一种方式为类添加对象属性;(3)而对象属性只能只能通过“对象名.属性名”方式访问;(4)每个类都包含一个内置的属性self,它代表当前对象本身。(5)在类的定义中,要访问当前对象的方法,必须通过self.方法名()形式访问,要访问当前对象的属性,必须通过“self.属性名”方式进行。3.3给类添加对象属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC给类添加对象属性实例:3.4给类添加类方法e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC方法是类对象实体的具体功能,在类定义中表现为函数的定义。在Python中的方法有三种:即对象方法(也叫实例方法)、类方法(也叫类方法)和静态方法。 对象方法:和对象属性类似,属于每个具体对象,只能通过“对象名.对象方法名()”方式调用,对象方法中,要操作当前对象的属性方法,需要用到内置的self属性; 类方法:类方法是所有对象共享的方法,可以通过“类名.类方法名()”方式或者“对象名.类方法名()”方式调用,类方法中调用当前类的类方法和类属性,类方法中不允许调用对象方法和对象属性; 静态方法:静态方法就是普通的函数,不属于某个对象,静态方法中不允许调用类方法、类属性和对象方法及对象属性。3.4给类添加类方法e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC给类添加方法的实例:e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC4封装类的成员4.1面向对象的三大特征e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC面向对象编程有三大特征:即封装、继承和多态。学习面向对象程序设计思想,必须掌握这几个概念。(1)封装(Encapsulation),限制类成员的可见范围,从而隐藏类内部结构的复杂性,确保编程的高内聚性。(2)继承(Inherit),就是通过现有的类派生出新的类,派生出的类包含原有类的部分或全部成员,这样做可以非常方便的扩展类的功能。(3)多态(polymorphism),多态性体现在类的继承中。一个类继承自某个类,则这个类即包含了父类的功能,又包含了自己的功能,在实际运行中,有它时候体现的是父类的功能或特性,有时候又体现的是自己的功能或特性。4.2封装类的属性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC属性的封装主要包括public(公共属性)、protected(保护属性)、private(私有属性)三种。具体如下:(1)private封装:属性名前加双下划线(__),该属性只能在类的定义代码中访问,类外部的代码不能直接访问。(2)protected封装:属性名前加单下划线(_),该属性只能被当前类和它的子类访问。也不能通过import的方式在其它模块中访问。(3)public封装:属性名前无下划线,表示该属性可以被类内部、外部的代码直接访问。4.3封装类的方法e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFACPython中封装类的方法和封装类的属性方式一样。封装为private类型的方法只需要在方法前面加上双下划线(__)封装为protected类型的方法需要在方法名称前面加单下划线(_)封装为public类型的方法不能在方法名前加下划线。e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC5类的继承和多态5.1继承类e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC继承就扩展现有类的功能,即从现有类派生出新类的过程。5.2继承类的可见性e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC可见性,就是类中的成员,在哪些可以访问,哪些不能访问。类成员的访问规则有如下一些:(1)父类中定义为public类型的成员,直接被继承到子类中,并且依然是public类型的;(2)父类中定义为private类型的成员,不会被继承到子类中,即被隐藏在父类中,子类中看不到;(3)父类中定义为protected类型的成员,被继承到子类中,变为private类型;(4)子类中同名成员会覆盖父类的同名成员;(5)子类中访问父类中被子类覆盖的成员需要特殊的语法格式,请见下面的内容。5.3重写父类的方法e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC很多时候,在子类中需要对来自父类的方法进行重写(也叫覆盖)。重写很容易,在子类中重新编写和父类中同名的方法即可。5.4子类调用父类的同名方法e7d195523061f1c0d3ba7f298e59d031c9c3f97027ed136f882110EF8F17BAD1F2C348D17C7856EF46CB4678CC9E44EE1ABA681E3133328A7B4D22AAF822B2429426B2355AA8CC4431B8568D2CF3B73AE9F4AE98D5A0D6A5566EF967553E96D781C502472DAB692B5E92B1CB5B32F40BF8CF6181A24AB2F2CD3A9A53F0FE7F0D4E247476572CCFAC在类继承中,子类会继承父类的非私有方法。(1)在子

温馨提示

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

评论

0/150

提交评论