




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象及练习题1 .面向对象1.1 面向对象概念面向对象是一种编程思想,是对现实世界中的事物进行抽象的方式。应用到代码编程设计中,是一种建立现实世界事物模型的方式。1.2 面向对象和面向过程区别面向过程关注的是完成工作的 步骤,面向对象关注的是 谁能完成工作。面向对象是在完成工作的时候关注哪些个体能够完成对应的工作,找到对应的个体即可完成对应任务。2 .类2.1 类的概念类是一系列事物的统称,同类事物必定具有相同的特征。日常事物的特征根据特性分为状态和行为,对应到类中是变量和方法。特征分类:状态 变量(成员变量)行为 方法(成员方法)统称:类的成员2.2 类定义语法格式class 类名:pa
2、ssI H JI Ft J2 I演示类的定义与对象的钿续 1 a,f f45 class Cat:p-说明:pass是空语句,不具有任何意义,仅为了保持程序结构完整性2.3 类名的命名规则类名命名规范:满足大驼峰命名规则3 .对象3.1 对象的概念对象是类的具体表现形式,是实际存在的个体。(类是一系列事物的统称)3.2 创建对象语法格式对象名=类名()class Cat:pass8910#创建对象catl = CatQ3.3注意事项对象的创建不限制数量,一个类可以创建任意个数的对象4 .成员变量4.1 成员变量的概念成员变量用于描述对象的固有状态或属性04.2 定义成员变量语法格式(公有属性/
3、公有变量)class 类名:def _init_(self):self.变量名1 =值1self.变量名 2 = None1234567演示类的成员变量class Cat:def init(self):self.type = =斯猫“None4.3 成员变量定义语法格式(独有属性/独有变量)对象名.变量名=值class Cat:5 fj def _init_(self);6 |self, type = "波斯猫"se i f t naine = None)n og10 catl = Cat() print(catl.type)12 =&
4、quot;大 j巾"printfcatl,name)14 #统m穿衣.服15 1一1 一亡1。"=。田口"4.4 公有变量与独有变量的区别公有变量在_init_方法中声明,每个对象都具有该变量独有变量在创建对象后声明,只有当前对象具有此变量定义对象的独有变量时,如果独有变量名与公有变量名相同,视为修改公有变量的值;如果独有变量名与公有变量名不相同,视为定义新的独有属性None含义是为空,表示没有具体的数据4.5 变量的调用格式取值:对象名.变量名赋值:对象名.变量名=值5.成员方法5.1 成员方法概念成员方法用于描述对象的固有行为5.2 定义成员方法语法格式格式一
5、(无参方法)class 类名:def 方法名(self):方法体"” rr2 演示类的成员方法二« rrclass Cat:5 用 def _init_(self):6 self .type ="波斯猫 = NoneSg . def eat(self): ic aprint("猫吃鱼”)格式二(有参方法)class 类名:def方法名(self,形参1,形参2,):方法体class cat:5 加千 _init_(self);6 J self .type ="波斯猫"self* name - None9 -j def
6、 eatfself):IQjiprint(“猫吃鱼”)de-F climb( iclfmetcr):«printC,猫会展树.爬了阳米" % neter)5.3调用成员方法语法格式格式一(调用无参方法)对象名.方法名()class Cat:5 h def _init_(self):6 self.type -“波斯猗”self* name - None89 de+ eat(self):t10 Lprint(“猫吃鱼)11def climb(三el千/meter):13 Cprint(”SS会爬树j爬了Xd米" % meter)14rAtl = Cat() Icatl
7、.catO格式二(调用有参方法)对象名.方法名(实参1,实参2,)Cat:5 def _init_(,门干):6 1lft元e - ”波斯猫“sell.nane = None8 def eat(self): mprint (“猫吃鱼”)11 def climb(frrieter);Uprint(“猫会爬树j爬了Md米“ X meter)14 catl - Cat()11ti.白t(1cat. cl15)6.init 方法6.1 _init_方法的作用_init_方法,也称为构造方法,创建对象时为对象初始化成员变量6.2 定义_init_方法语法格式格式一:def _init_(self):se
8、lf.变量名1 =值14耳 class Cat:5千);|oself .type ="波斯猫"self< name = Nonedef _init_(self,形参1,形参2,):self._属性名1 =形参1 self._属性名2=形参2class Cat;def _init_(self, type, name);self._type - type/self. name = mam?6.3 init方法调用和执行_init_方法在创建对象时被运行,无需手工调用即可执行_init_方法中如果有形参,在创建对象时需要传递对应的实参word教育资料魔术方法是在类中声明、定
9、义的方法,执行时无需手工调用,自动执行7. str_ 方法7.1 _str_方法的作用_str_方法是在使用print函数打印输出对象到屏幕时被调用的方法,用于返回对象的规范化字符串表现形式7.2 定义 str方法语法格式def_str_(self):return打印对象是显示的信息class Cati def _init_(self):If-type -波斯猫" .tidme = Nones def eat(self): 猫危匈11def climb( meter):print,猫心咫物,雇了Md米" % meter)def str ( ef : f):return
10、39;'打印)一只猫”catl = cat() print(cati)8.成员方法调用类成员8.1 成员方法中调用成员变量语法格式self.变量名2*本峡出力出消左J F川小乙class Cat:def(“ 1十):self, type = "波斯描 " sel+t nanie = none白 '# def introduce(seLf);Id#printf”竟是一片的,我算以与"Z (set/-, typf spEFdomp)def Lntroduce(self):print("我|一只工箝 我叫知,我穿的衣服吊粕” % (sKtyp2
11、, -elEnaiwe.£日1千.color)1 acati = cat( catlnname -,大帅” cjtl-color - "红色” cdtl.inlrodutet)8.2成员方法中调用成员方法语法格式self.方法名(实参1,实参2,)class Cat:def catch(self):word教育资料君学帝:觥割娈* « ¥I- 2 J#1旬 U 12 13 14 1S 16 17 18 1921se.f.jumpf加 f.£rasp()1f.bit已()def jump( 1 '): print,猫跳起来")d
12、ef日白领"");print 一霾挺住了老阮)def bite(spl ;print霸咬住了老鼠”)Cfltl = rat()catl.catch()8.3 selfself仅出现在成员方法中,指代执行该方法的对象9.封装9.1 封装的作用封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的9.2 定义私有变量语法格式self.属性名=值ari if rr2演示私有代属性与封装二rr rrJclass Card:5def _init_(self):self.card_id = Noneseif *pwd = None9.3 定义私有方法语法格式d
13、ef 方法名(self,形参1,形参2,):方法体cl0ss Card *def _init_(self): sei ,card_id = None&elf*_pwd = Nonedef get pwd(self):return self,_pwd9.4 标准封装语法格式变量私有化格式:self.属性名=值提供公共的访问器格式:def get_JS性名(self):return self._属性名提供公共的修改器格式:def set_属性名(self,属性名):self._属性名=属性名?通示私仃比蟠乾?耳黑|class Card:4式 _ii-t匕/。: r card id - No
14、ne ,A<f_pwd - Nonedpf g?T_pTd (' p' f'1 ;return 三二:f_pwddef .sei_j*d( r.pd): :-: f- pwd - pwd10.类变量1.1 1类变量的概念类变量是定义在类中,不属于某个具体对象的特征,被所有对象共同使用的特征1.2 2定义类变量语法格式class 类名:变量名=值11.2定义类方法基本语法赋值格式:类名.类变量名=值取值格式:类名.类变量名(推荐)对象名.类变量名(不推荐)1.4 4注意事项类变量推荐使用类名取值访问,也可以使用对象名取值访问类变量只能通过类名修改;使用对象名调用类变
15、量修改类变量的值 时会创建新的对象独有变量;如果此时对象具有同名对象变量,则 修改对应的变量值类变量可以私有化11 .类方法11.1 类方法的概念类方法是定义在类中,不属于某个具体对象的行为,被所有对象共同使用的行为class 类名:classmethoddef方法名(cls ,形参1,形参2,):方法体class Chinese:country = "中国”def _inir_: self.id_num = idnumcoif* name - nameclassmethoddef show_country= cls)ipin底”我是中国人11.3 调用类方法语法格式类名.类方法名(
16、实参1,实参2,)(推荐)对象名.类方法名(实参1,实参2,)(不推荐)11.4 注意事项cls进行类方法中不允许使用实例变量和实例方法类方法中允许使用类变量和类方法,通过第一个参数实例方法中允许使用类变量和类方法word教育资料12 .静态方法12.1 定义静态方法语法格式class 类名:staticmethoddef方法名(形参1,形参2,):方法体class Chinese:country ="中 M*dof1elt, id_num, name):: < f r :d_num - ' n num£Etelf, 口口魄=name&5taticmo
17、thoddef &howC);i?阳mt L今天犬气串错r12.2 调用静态方法语法格式类名.静态方法名(实参1,实参2,)(推荐)对象名.静态方法名(实参1,实参2,)(不推荐)12.3 各种方法定义规则只访问成员变量的方法,定义成实例方法只访问类变量的方法,定义类方法既访问成员变量,也访问类变量的方法,定义成实例方法 既不访问成员变量,也不访问类变量,定义成静态方法word教育资料word教育资料练习题2概念理解要求:1. 如何理解面向对象编程(OOP)2. 什么是类,什么是对象提示:1. 类和对象有两个层面的含义:类是对一类具体的事物的抽象的概括, 具有相似内部状态和运动规律的实
18、体的集合,具有相同属性和行为事物的统称,是抽 象的;对象是一个具体的事物,在现实世界中可以是看得见摸得着的, 可以直接 使用的2. 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类word教育资料定义类、创建对象要求:1. python中如何定义一个类class 类名:方法class Test:def test (self ):pass2. 类(class)由哪三个部分构成类的名称、类的属性、类的方法3. 类名的命名规则是什么大驼峰命名法4. python中如何通过类创建对象,请用代码进行说明#创建对象#对象名=类名()class Human # 定义类passman= Human)#创
19、建对象5. 如何在类中定义一个方法,请用代码进行说明class Human#定义run方法def run (self ): print ("正在奔跑")6. 定义一个People类,使用People类,创建一个mayuM象后,添加company属性,值是"阿里巴巴";创建一个wangjianling 对象,添加company属性,值 是“万达集团”class People: passmayun= People ()# 仓建 mayun对象mayuncompany="阿里巴巴"#为对象添加属性wangjianlin = People (
20、)# 创建 wangjianlin 对象wangjianlin . company = "万达集团"7. 定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加上颜色属性class Fruit :apple = Fruit ()apple . color ="红色"orange = Fruit ()orange. color ="橙色"watermelon = Fruit ()watermelon ="绿色"8. 定义一个汽车类,并在类中定义一个 move方法,然后分别创建BMW_X9AUDI_
21、A例象,并添加颜色、马力、型号等属性,然后分别打印出属性值、调用move方法class Car:def move( self ):print ("汽车正在移动")BMW_X9 Car()BMW_Xc010r ="白色"BMW_Xhorsepower = "300"BMW_Xmodel = "X9"BMW_X9nov)print ("这辆$ %s的马力是$匹"%(BMW_Xcolor , BMW_Xmodel, BMW_Xhorsepower)word教育资料AUDI_A9= Car()AUDI_
22、A9color ="黑色"AUDI_A9 horsepower = "320"AUDI_A9 model = "A9"AUDI_A9move()print ("这辆$ %s的马力是 s匹"AUDI_A9color , AUDI_A9model,AUDI_A9 horsepower)提示:1. 可以在通过类创建出对象后,再为对象添加属性:对象名.属性名=值的方式添加2. 调用对象的方法和调用普通函数的一样,使用()来实现调用,只不过调用方法需要使用:对象名.方法名()来进行调用练习题3要求:_init_ 方法、_st
23、r_ 方法、self1. init 方法有什么作用,如何定义当使用类名()的方法去创建对象的时候python解释器会自动调用 init 方法word教育资料因此可以在_init_方法中做一些初始化的设定在每次创建新对象时,都自动完成这些初始化的设定class Humandefinit_ (self):#注意名字不能写错,否则就只是一个普通的方法pass2. _str_方法有什么作用,使用时应注意什么问题如果类中定义了 _str_方法,那么当使用print打印对象时,打印出的信息是_str_方法的返回值汪思点:_str_方法必须有返回值,且必须返回一个字符串类型的值3. 方法中的"se
24、lf"代表什么类中定义的许多方法,除了之后会提到的类方法和静态方法以外,其他任何的方法当被对象调用时,python解释器都会把这个对象作为这个方法的第一个参数传入所以定义这些方法时,必须写上第一个参数,往往写成self去接收因此在这些方法中,self就可以直接被当做当前对象来使用4. 在类中定义_init_和_str_方法时,必须提供形参吗,第一个形参又必须是self吗?为什么?同上但这个参数名可以写成别的,但往往写成 self ,便于编写程序的人区分提示:1. _init_方法可以在创建对象时,为对象实现一些初始化的操作,提供一些默认属性2. _str_方法可以在使用print打印
25、对象时,打印出_str_方法的返回值3. _str_方法必须拥有返回值,并且返回值的数据类型格式只能是字符串类型练习题4判断以下说法是否正确,并说明理由要求:1. 类就好比一个模型,可以预先定义一些统一的属性或者方法,然后通过这个模型创建出具体的对象True2. 类是抽象的,而对象是具体的、实实在在的一个事物True3. 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类True4. 一个类只能创建出一个对象False通过类可以创建无数个不同的对象例外:使用了单例模式的,只会创建出一个对象(就业班课程会讲解单例模式)5. _init_方法在创建对象时,可以完成一些初始化的操作,完成一些默认
26、的设定True6. 类是抽象的,而对象是具体的、实实在在的一个事物True7. _str_方法可以没有返回值False必须有返回值8. _str_方法可以返回除字符串以外的其他类型的数据False必须返回字符串类型的数据练习题1面向对象应用1要求:1. 任意定义一个动物类2. 使用_init_方法,在创建某个动物对象时,为其添加 name age、colorfood等属性,如“熊猫”,5, “黑白”,66, “竹子”3. 为动物类定义一个run方法,调用run方法时打印相关信息,如打印出“熊猫正在奔跑”4. 为动物类定义一个get_age方法,调用get_age方法时打印相关信息,如打印出“这
27、只熊猫今年5岁了”5. 为动物类定义一个eat方法,调用eat方法时打印相关信息,如打印出“熊猫正在吃竹子”6. 通过动物类分别创建出3只不同种类的动物,分别调用它们的方法,让他们“跑起来”,“吃起来”class Animal:def _init_ (self , name age, color , food):self . name= name # 为对象设置 name属性self . age = age #为对象设置age属性self . color = color # 为对象设置 color 属性self . food = food #为对象设置food属性# run方法def run
28、(self ):print ("%s 正在奔跑"%self . name# 打印年龄的方法def get_age(self ):print ("这只 $今年 s"% self . name str (self . age)# 吃方法def eat (self ):print ("%s 正在吃 s"( self . name self . food)# 猫catTom = Animal ("Tom", 3, "gray" , "fish")# 老鼠mouseJerry = An
29、imal( "Jerry" , 3, "brown","奶酪")# 狗watchdog = Animal ("旺财",2, "white" , "meat")tom_cat. run ()tom_cat. get_age ()tom_cat. eat ()额外知识函数在学习函数之前,首先要明白为什么要学习函数?学习了函数,能提高我们的工作效率,编程语言里面,离不开函数提高效率体现在哪里?函数可以封装一段代码,只需要我们定义一次,就可以做到多次使用了函数是用来干什么的?每一个函
30、数都有对应的意义,我们定义函数,都是为了实现某种单一的功能,也就是说,函数就是为了实现某种功能,实现某些需求的9.定义函数那我们如何定义函数?def:吉明一个函数的关聋字.这就与望thon的解释器,我这皇写的是一他数1L声明. b函数/ 的代凝Bdef say_hellprint ("helloTsa_hell。:表示我给这人函数取的名字,这个名字要 符合标识符的规则,做至J见名知意的效果法个(V艮精髓刖7麦示代科的灵活性。里面能 够随意的放我们想要传的参数say_hello实现这个say_hM 口这个功能的代码段2.调用函数 的代班段写了一个函数,我们只有调用它的时候,这个函数才是
31、有意义的任何一个函数,必须要先声明,再调用当我们调用say_hello这个函数的时候,我们能看到这样的一句打印输出,这就 说明这个函数被调用了C ni*T? g I? rpl Uf" I i ft sc: fi* Jhsfl Pc1wii;,prHL:m t 而m 督±通*甲冲邛©虐Jj l是小jy kl JT p£«C-ft££i i .LULluild feilD任何一个函数,必须要做到先定义(先声明),后调用如果我们将调用提前,我们会看到:Lnrfrsolved rtference 1 say_hela' mo
32、re. (Clrl+ Fl)def say_hello(:print (*hel loJ为什么?因为咱们python是一门解释性语言,代码是从上到下一行一行执行的,所以当代 码运行到第一行的时候,我们调用say_hello()的时候,并没有对应的方法,这就 好比:我们把say_hello()当做一个做饭的功能,我们只有先做饭,才能吃饭,先 有做饭这个功能,我们才能做饭.10. 函数的复用性下面说一下函数参数的使用,那么,在说参数之前,我们先了解一下函数的复用性,使用函数到底好在哪里?比如我有这么一个需求,我想遍历一个1-100之间所有的数,这很简单i = 0while i <=100:p
33、rint ii+=1这样我就能获取1-100之间所有的数我们将这一段代码封装到一个函数里面去,这样我们就很方便的能够在任何地方 打印1-100之间所有的数了def traverse ():i = 0while i <= 100: print (il.g i += 1traverse 0t 前»E>一 w' I ft9 ,DD如果我们想在其他的页面也打印这个1-100之间所有的数,那我们还用写这个代码么?答案是肯定不需要再写这么多行代码了1.确定这个函数的包名,我取的名字是utils2.导包3.我们来看一下控制台能不能获取到1-100之间所有的数derrc959G9
34、79899100Process £ uuishe J -Fith ez it c odle 0也是可以的,所以说,这个函数封装了我们一段代码,实现了打印1-100之间所有 的数那我们在工作中,实际上一个大的项目是有很多重复的功能的,比如联网的操作, 我们不可能每次都这样一行行的写代码,所以,我们把它封装到一个函数里面,下 次想联网获取直接调用我们写好的函数就行了 ,这就是函数的好处,复用性,这就 是函数的可多次调用.11. 函数的参数言归正传,我们来说说函数参数的使用刚刚我们已经能够获取到1-100之间所有的数了,但是我们现在改需求了,我们希望能够获取100-200之间的所有的数,这
35、个怎么办呢?这个也很简单def traverse1();print (i) i += 1traversel0我们再定义一个函数traverse1(),初始值改成100,当满足小于等于200的情况打印就行了ok,没问题,那我现在再改需求了 ,我希望打印出200到400之间所有的数,怎么办?也很简单:def 工翅红5/2。:200while I,。:print (i) i 十= 1traverse2()那我如果再改需求,我想打印10-50之间的所有数,我是不是又要定义一种方法traverse3()?显然,我们发现,其实这几个函数,相似的地方还是挺多的我们仅仅只是改变了i的初始值,以及while i
36、 <= 多少的一个值而已,这样的代码,显然是过于死板的, 我们需要把这个代码写活,这里,我们就用到了参数了实际上,如果我们i的初始值和我们循环的条件i<=多少的值要是能随心所欲的 根据我们自己的需求变化就好了 ,所以这里,我定义了两个变量,一个是m一个是n,m表示循环的初始值,n表示你 循环的终止值,也就是i<=n我们循环的条件如果我们想遍历100-200之间的所有数,那我们传进来100,200就能够代替这个m,n的值就好了 ,这里,咋们函数提供了这样的一种方式def traverse2(ni, 6 : 2J 1 1while i <=print (i)i += 1tr
37、averse2(lOOj 200)我们把100这个值传给了 m,200这个值传给了 n那么i = 100while i <= 200:我们就能打印出100到200之间所有的数了,现在,我希望打印200-300之间的数,就可以直接使用就行了-3E T-打印的数traverse? (1002200)traverse2(200, 300)、打印200-300之间篇的教一行代码就搞定了,所以说,有参数的函数是灵活的那么参数又分为形参和实参:在函数上定义的参数只是一个占位符,被称为形式参数,简称形参在调用时传入的参数是具体的内容,被称为实际参数,简称实参m和n仅仅只是一个占位而已,我们如果不传值进
38、来,是没有任何的意义的这就是函数的参数的使用12. 函数的返回值再来说说函数的返回值比如我们有这么的一个需求:求1-100之间的和:也非常简单,我们看一下控制台输出的结果:5050tend untotraverse0 while i <= n def traverse (m3 n):i = msum = 0while i <= n:5050/(100 -1 + 1)5050/10050.5sum += ii +二 1|p 丁 i 二二 Eum)rinHsuin /(n-traverse(l一100) ""如果我们把这个求平均值的代码放traverse。函数里面合
39、理吗?目前来说好像要求达到了,但是我们在回过头来看看,如果我们继续想要遍历m-n之间所有的数,次函数还能用吗?显然是不能的,因为这个函数已经被我们改变了功能,他是求m-n之间所有数的平均值那我们前面那么多的地方,都引用到了打印 m-n之间所有的数,现在却变成了求平均值了 ,这样合理吗?显然是不合理的 所以,函数的功能必须是独立的,也就是说,我们还需要定义一个求平均值的函 数】 加口 fx SU60;tdef get_average_value (叫 n, sum):print(sum / (n - m + 1)求1-100之间所有数的平均值,现在1-100的m,n的值我都知道,但是sum的值我知道吗?def traverse (m, n):i = msum - 0while = <=n:sum += iHint在tr&verweO函数里面aum的值为知T % sum)看看控制台的输出C 通”明主文pmlF*yti*、FyElbMJ:tpE:L6fc 自> %/p羊曜”"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上业务操作
- 2023年部编版道德与法治小学三年级下册期中测试题(有答案)
- DB12T 341-2007 粉丝类食品中聚乙烯醇的测定
- 家庭主题乐园旅游合同
- 宾馆酒店工程监理合同(2篇)
- 网格预案工作总结
- 演艺活动合同范本简单
- 脆弱文案励志工作总结
- 施工现场安全生产教育
- 2025至2030年中国手动螺丝刀行业投资前景及策略咨询报告001
- 2024年美容师考试理论回顾试题及答案
- 物管物业交接验收明细表格(全)模板
- 口腔科诊断证明书模板
- 《远离浮躁,静心学习》ppt课件
- 二维数控精密工作台设计说明书
- 河北省衡水市安平中学2020-2021学年高一下学期第一次月考生物试题
- 项目研究助力区域教学改进
- 初中化学优质课评分表.
- LKJ-2000课件
- 五星级大酒店项目全套可行性分析报告(完整版)
- 小麦新品种‘石优20号'的选育技术与推广方法
评论
0/150
提交评论