python面向对象概念及练习题_第1页
python面向对象概念及练习题_第2页
python面向对象概念及练习题_第3页
python面向对象概念及练习题_第4页
python面向对象概念及练习题_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、.面向对象及练习题1. 面向对象1.1面向对象概念面向对象是一种编程思想,是对现实世界中的事物进行抽象的方式。应用到代码编程设计中,是一种建立现实世界事物模型的方式。1.2 面向对象和面向过程区别面向过程关注的是完成工作的步骤,面向对象关注的是谁能完成工作。面向对象是在完成工作的时候关注哪些个体能够完成对应的工作,找到对应的个体即可完成对应任务。2. 类2.1类的概念类是一系列事物的统称,同类事物必定具有相同的特征。日常事物的特征根据特性分为状态和行为,对应到类中是变量和方法。特征分类:状态 变量(成员变量)行为 方法(成员方法) 统称:类的成员2.2类定义语法格式class 类名: pass

2、说明:pass是空语句,不具有任何意义,仅为了保持程序结构完整性2.3类名的命名规则类名命名规范:满足大驼峰命名规则3. 对象3.1对象的概念对象是类的具体表现形式,是实际存在的个体。(类是一系列事物的统称)3.2创建对象语法格式对象名 = 类名()3.3 注意事项对象的创建不限制数量,一个类可以创建任意个数的对象4. 成员变量4.1成员变量的概念成员变量用于描述对象的固有状态或属性。4.2定义成员变量语法格式(公有属性/公有变量)class 类名: def _init_(self):self.变量名1 = 值1self.变量名2 = None4.3成员变量定义语法格式(独有属性/独有变量)对

3、象名.变量名 = 值4.4公有变量与独有变量的区别l 公有变量在_init_方法中声明,每个对象都具有该变量l 独有变量在创建对象后声明,只有当前对象具有此变量l 定义对象的独有变量时,如果独有变量名与公有变量名相同,视为修改公有变量的值;如果独有变量名与公有变量名不相同,视为定义新的独有属性l None含义是为空,表示没有具体的数据4.5变量的调用格式取值:对象名.变量名赋值:对象名.变量名 = 值5. 成员方法5.1成员方法概念成员方法用于描述对象的固有行为5.2定义成员方法语法格式格式一(无参方法):class 类名: def 方法名(self):方法体格式二(有参方法)class 类名

4、: def 方法名(self,形参1,形参2,):方法体5.3调用成员方法语法格式格式一(调用无参方法): 对象名.方法名()格式二(调用有参方法): 对象名.方法名(实参1,实参2,)6. _init_方法6.1_init_方法的作用_init_方法,也称为构造方法,创建对象时为对象初始化成员变量6.2定义_init_方法语法格式格式一:def _init_(self):self.变量名1 = 值1格式二:def _init_(self,形参1,形参2,):self._属性名1 = 形参1self._属性名2 = 形参26.3_init_方法调用和执行l _init_方法在创建对象时被运行,

5、无需手工调用即可执行l _init_方法中如果有形参,在创建对象时需要传递对应的实参6.4魔术方法魔术方法是在类中声明、定义的方法,执行时无需手工调用,自动执行。7. _str_方法7.1_str_方法的作用_str_方法是在使用print函数打印输出对象到屏幕时被调用的方法,用于返回对象的规范化字符串表现形式7.2定义_str_方法语法格式def _str_(self):return 打印对象是显示的信息8. 成员方法调用类成员8.1成员方法中调用成员变量语法格式self.变量名8.2成员方法中调用成员方法语法格式self.方法名(实参1,实参2,)8.3 self self仅出现在成员方法

6、中,指代执行该方法的对象。9.封装9.1封装的作用封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的9.2定义私有变量语法格式self._属性名 = 值9.3定义私有方法语法格式def _方法名(self,形参1,形参2,):方法体9.4 标准封装语法格式变量私有化格式:self._属性名 = 值提供公共的访问器格式:def get_属性名(self):return self._属性名提供公共的修改器格式:def set_属性名(self,属性名):self._属性名 = 属性名10.类变量10.1类变量的概念类变量是定义在类中,不属于某个具体对象的特征,被所有对

7、象共同使用的特征10.2定义类变量语法格式class 类名:变量名 = 值10.3调用类变量语法格式赋值格式:类名.类变量名 = 值取值格式:类名.类变量名(推荐)对象名.类变量名(不推荐)10.4注意事项l 类变量推荐使用类名取值访问,也可以使用对象名取值访问l 类变量只能通过类名修改;使用对象名调用类变量修改类变量的值时会创建新的对象独有变量;如果此时对象具有同名对象变量,则修改对应的变量值l 类变量可以私有化11.类方法11.1类方法的概念类方法是定义在类中,不属于某个具体对象的行为,被所有对象共同使用的行为11.2定义类方法基本语法class 类名:classmethoddef 方法名

8、(cls, 形参1,形参2,):方法体11.3调用类方法语法格式类名.类方法名(实参1,实参2,) (推荐)对象名.类方法名(实参1,实参2,) (不推荐)11.4注意事项l 类方法中不允许使用实例变量和实例方法l 类方法中允许使用类变量和类方法,通过第一个参数cls进行l 实例方法中允许使用类变量和类方法12.静态方法12.1定义静态方法语法格式class 类名:staticmethoddef 方法名(形参1,形参2,):方法体 12.2调用静态方法语法格式类名.静态方法名(实参1,实参2,) (推荐)对象名.静态方法名(实参1,实参2,) (不推荐)12.3各种方法定义规则l 只访问成员变

9、量的方法,定义成实例方法l 只访问类变量的方法,定义类方法l 既访问成员变量,也访问类变量的方法,定义成实例方法l 既不访问成员变量,也不访问类变量,定义成静态方法练习题1概念理解要求:1. 如何理解面向对象编程(OOP)2. 什么是类,什么是对象提示:1. 类和对象有两个层面的含义:类是对一类具体的事物的抽象的概括,具有相似内部状态和运动规律的实体的集合,具有相同属性和行为事物的统称,是抽象的;对象是一个具体的事物,在现实世界中可以是看得见摸得着的,可以直接使用的2. 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类练习题2定义类、创建对象要求:1. python中如何定义一个类 cl

10、ass 类名: 方法. class Test: def test(self): pass2. 类(class)由哪三个部分构成 类的名称、类的属性、类的方法3. 类名的命名规则是什么 大驼峰命名法4. python中如何通过类创建对象,请用代码进行说明 # 创建对象 # 对象名 = 类名() class Human: # 定义类 pass man = Human() # 创建对象5. 如何在类中定义一个方法,请用代码进行说明 class Human: # 定义run方法 def run(self): print(正在奔跑)6. 定义一个People类,使用People类,创建一个mayun对象

11、后,添加company属性,值是阿里巴巴;创建一个wangjianling对象,添加company属性,值是万达集团 class People: pass mayun = People() # 创建mayun对象 pany = 阿里巴巴 # 为对象添加属性 wangjianlin = People() # 创建wangjianlin对象 pany = 万达集团7. 定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加上颜色属性 class Fruit: pass apple = Fruit() apple.color = 红

12、色 orange = Fruit() orange.color = 橙色 watermelon = Fruit() watermelon = 绿色8. 定义一个汽车类,并在类中定义一个move方法,然后分别创建BMW_X9、AUDI_A9对象,并添加颜色、马力、型号等属性,然后分别打印出属性值、调用move方法 class Car: def move(self): print(汽车正在移动) BMW_X9 = Car() BMW_X9.color = 白色 BMW_X9.horsepower = 300 BMW_X9.model = X9 BMW_X9.move() print(这辆%s %s

13、的马力是%s匹%(BMW_X9.color,BMW_X9.model,BMW_X9.horsepower) AUDI_A9 = Car() AUDI_A9.color = 黑色 AUDI_A9.horsepower = 320 AUDI_A9.model = A9 AUDI_A9.move() print(这辆%s %s的马力是%s匹%(AUDI_A9.color, AUDI_A9.model, AUDI_A9.horsepower)提示:1. 可以在通过类创建出对象后,再为对象添加属性:对象名.属性名 = 值 的方式添加2. 调用对象的方法和调用普通函数的一样,使用()来实现调用,只不过调用

14、方法需要使用:对象名.方法名()来进行调用练习题3要求:_init_方法、_str_方法、self1. _init_方法有什么作用,如何定义 当使用类名()的方法去创建对象的时候 python解释器会自动调用_init_方法 因此可以在_init_方法中做一些初始化的设定 在每次创建新对象时,都自动完成这些初始化的设定 class Human: def _init_(self): # 注意名字不能写错,否则就只是一个普通的方法 pass2. _str_方法有什么作用,使用时应注意什么问题 如果类中定义了_str_方法,那么当使用print打印对象时,打印出的信息是 _str_方法的返回值 注意

15、点: _str_方法必须有返回值,且必须返回一个字符串类型的值3. 方法中的self代表什么 类中定义的许多方法,除了之后会提到的类方法和静态方法以外,其他任何的方法 当被对象调用时,python解释器都会把这个对象作为这个方法的第一个参数传入 所以定义这些方法时,必须写上第一个参数,往往写成self去接收 因此在这些方法中,self就可以直接被当做当前对象来使用4. 在类中定义_init_和_str_方法时,必须提供形参吗,第一个形参又必须是self吗?为什么? 同上 但这个参数名可以写成别的,但往往写成self,便于编写程序的人区分提示:1. _init_方法可以在创建对象时,为对象实现一

16、些初始化的操作,提供一些默认属性2. _str_方法可以在使用print打印对象时,打印出_str_方法的返回值3. _str_方法必须拥有返回值,并且返回值的数据类型格式只能是字符串类型练习题4判断以下说法是否正确,并说明理由要求:1. 类就好比一个模型,可以预先定义一些统一的属性或者方法,然后通过这个模型创建出具体的对象 True2. 类是抽象的,而对象是具体的、实实在在的一个事物 True3. 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类 True4. 一个类只能创建出一个对象 False 通过类可以创建无数个不同的对象 例外:使用了单例模式的,只会创建出一个对象(就业班课程会

17、讲解单例模式)5. _init_方法在创建对象时,可以完成一些初始化的操作,完成一些默认的设定 True6. 类是抽象的,而对象是具体的、实实在在的一个事物 True7. _str_方法可以没有返回值 False 必须有返回值8. _str_方法可以返回除字符串以外的其他类型的数据 False 必须返回字符串类型的数据练习题1面向对象应用1要求:1. 任意定义一个动物类2. 使用_init_方法,在创建某个动物对象时,为其添加name、age、color,food等属性,如“熊猫”,5,“黑白”,66,“竹子”3. 为动物类定义一个run方法,调用run方法时打印相关信息,如打印出“熊猫正在奔

18、跑”4. 为动物类定义一个get_age方法,调用get_age方法时打印相关信息,如打印出“这只熊猫今年5岁了”5. 为动物类定义一个eat方法,调用eat方法时打印相关信息,如打印出“熊猫正在吃竹子”6. 通过动物类分别创建出3只不同种类的动物,分别调用它们的方法,让他们“跑起来”,“吃起来” class Animal: def _init_(self, name, age, color, food): = name # 为对象设置name属性 self.age = age # 为对象设置age属性 self.color = color # 为对象设置color属性 s

19、elf.food = food # 为对象设置food属性 # run方法 def run(self): print(%s正在奔跑.%) # 打印年龄的方法 def get_age(self): print(这只%s今年%s%(, str(self.age) # 吃方法 def eat(self): print(%s正在吃%s%(, self.food) # 猫 catTom = Animal(Tom, 3, gray, fish) # 老鼠 mouseJerry = Animal(Jerry, 3, brown, 奶酪) # 狗 watc

20、hdog = Animal(旺财, 2, white, meat) tom_cat.run() tom_cat.get_age() tom_cat.eat() .额外知识函数 在学习函数之前,首先要明白为什么要学习函数?学习了函数,能提高我们的工作效率,编程语言里面,离不开函数提高效率体现在哪里?函数可以封装一段代码,只需要我们定义一次,就可以做到多次使用了.函数是用来干什么的?每一个函数都有对应的意义,我们定义函数,都是为了实现某种单一的功能,也就是说,函数就是为了实现某种功能,实现某些需求的9. 定义函数那我们如何定义函数?当我们调用say_hello这个函数的时候,我们能看到这样的一句打

21、印输出,这就说明这个函数被调用了.任何一个函数,必须要做到先定义(先声明),后调用如果我们将调用提前,我们会看到:为什么?因为咱们python是一门解释性语言,代码是从上到下一行一行执行的,所以当代码运行到第一行的时候,我们调用say_hello()的时候,并没有对应的方法,这就好比:我们把say_hello()当做一个做饭的功能,我们只有先做饭,才能吃饭,先有做饭这个功能,我们才能做饭.10. 函数的复用性下面说一下函数参数的使用,那么,在说参数之前,我们先了解一下函数的复用性,使用函数到底好在哪里?比如我有这么一个需求,我想遍历一个1-100之间所有的数,这很简单i = 0while i

22、=100:print ii+=1这样我就能获取1-100之间所有的数我们将这一段代码封装到一个函数里面去,这样我们就很方便的能够在任何地方打印1-100之间所有的数了如果我们想在其他的页面也打印这个1-100之间所有的数,那我们还用写这个代码么?答案是肯定不需要再写这么多行代码了1. 确定这个函数的包名 ,我取的名字是utils2. 导包3. 我们来看一下控制台能不能获取到1-100之间所有的数也是可以的,所以说,这个函数封装了我们一段代码,实现了打印1-100之间所有的数那我们在工作中,实际上一个大的项目是有很多重复的功能的,比如联网的操作,我们不可能每次都这样一行行的写代码,所以,我们把它

23、封装到一个函数里面,下次想联网获取直接调用我们写好的函数就行了,这就是函数的好处,复用性,这就是函数的可多次调用.11. 函数的参数言归正传,我们来说说函数参数的使用刚刚我们已经能够获取到1-100之间所有的数了,但是我们现在改需求了,我们希望能够获取100-200之间的所有的数,这个怎么办呢?这个也很简单我们再定义一个函数traverse1(),初始值改成100,当满足小于等于200的情况打印就行了ok,没问题,那我现在再改需求了,我希望打印出200到400之间所有的数,怎么办?也很简单:那我如果再改需求,我想打印10-50之间的所有数,我是不是又要定义一种方法traverse3()?显然,

24、我们发现,其实这几个函数,相似的地方还是挺多的我们仅仅只是改变了i的初始值,以及while i = 多少的一个值而已,这样的代码,显然是过于死板的,我们需要把这个代码写活,这里,我们就用到了参数了实际上,如果我们i的初始值和我们循环的条件i= 多少的值要是能随心所欲的根据我们自己的需求变化就好了,所以这里,我定义了两个变量,一个是m 一个是n,m表示循环的初始值,n表示你循环的终止值,也就是i=n我们循环的条件如果我们想遍历100-200之间的所有数,那我们传进来100,200 就能够代替这个m,n的值就好了,这里,咋们函数提供了这样的一种方式我们把100这个值传给了m,200这个值传给了n那么 i = 100while i = 200:我们就能打印出100到200之间所有的数了,现在,我希望打印200-300之间的数,就可以直接使用就行了一行代码就搞定了,所以说,有参数的函数是灵活的那么参数又分为形参和实参:在函数上定义的参数只是一个占位符,被称为形式参数,简称形参

温馨提示

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

评论

0/150

提交评论