资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Python中类的定义与使用,用知识的浪花去推动思考的风帆,用智慧的火星去点燃思想的火花,用浪漫的激情去创造美好的生活,用科学的力量去强劲腾飞的翅膀,!,翟哥,复习,Python,的特点,本次主要知识点,一,面向对象程序设计基础,二,定义和使用类,三,类的继承和多态,四,思考题,五,总结,一,面向对象程序设计基础,1.3,给大家介绍对象,爬,跑,咬人,吃东西,睡觉,绿色,四条腿,10kg,有外壳,大嘴巴,对象,=,属性,+,方法,1.4,面向对象程序设计中的基本概念,(,1,)对象(,Object,):面向对象程序设计思想可以,将一组数据和与这组数据有关操作组装在一起,,形成一个实体,这个实体就是对象。,(,2,)类(,class,):,具有相同或相似性质的对象的抽象就是类,。因此,对象的抽象是类,类的具体化就是对象。例如,如果人类是一个类,则一个具体的人就是一个对象。,(,3,)封装:,将数据和操作捆绑在一起,,定义一个新类的过程就是封装。,(,4,)继承:类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的关系。子类可以对基类的行为进行扩展、覆盖、重定义。如果人类是一个类,则可以定义一个子类“男人”。“男人”可以继承人类的属性(例如姓名、身高、年龄等)和方法(即动作。例如,吃饭和走路),在子类中就无需重复定义了。从同一个类中继承得到的子类也具有多态性,即相同的函数名在不同子类中有不同的实现。就如同子女会从父母那里继承到人类共有的特性,而子女也具有自己的特性。,(,5,),方法:也称为成员函数,,是指对象上的操作,作为类声明的一部分来定义。方法定义了,可以对一个对象可以执行的操作,。,(,6,)构造函数:一种成员函数,来在创建对象时初始化对象。构造函数一般与它所属的类完全同名。,二,定义和使用类,2.1,声明类,2.2,类方法,2.3,使用,instance(),函数判断对象类型,2.1,声明类,在,Python,中,可以使用,class,关键字来声明一个类,其基本语法如下:,class,类名,:,成员变量,成员函数,同样,,Python,使用缩进标识类的定义代码,。,【,例,2-1】,class Person:,def SayHello(self):,print(Hello!),2.1.1self,可以看,到,到,在,成,成员函,数,数,SayHello(),中有一,个,个参数,self,。这也,是,是类的成,员,员函数,(,(方法,),)与普,通,通函数,的,的主要,区,区别。类的,成,成员函,数,数必须有一个,参,参数,self,,而且位于,参,参数列表的,开,开头。,self,就代表类的,实,实例(对象,),)自身,可以使用,self,引用类的属,性,性和成员函,数,数。在后面,部,部分还会结,合,合实际应用,介,介绍,self,的使用方法,。,。,2.1.2,定义类的对,象,象,对象是类的,实,实例。如果人类,是,是一个类的,话,话,那么某,个,个具体的人,就,就是一个对,象,象。只有定,义,义了具体的,对,对象,才能,使,使用类。,Python,创建对象的,方,方法如下:,对象名,=,类名,(),例如,下面,的,的代码定义,了,了一个类,Person,的对象,p,:,p=Person(),【,例,2-2】,classPerson:,def SayHello(self):,print(Hello!);,p=Person(),p.SayHello(),运行结果如,下,下:,Hello!,2.1.3,成员变量,【例,2-3,】定义一个字,符,符串类,MyString,,定义成员,变,变量,str,,并同时对,其,其赋初始值,。,。,classMyString:,str=MyString,def output(self):,print(self.str),s=MyString(),s.output(),2.1.4Python,使用下划线,作,作为变量前,缀,缀和后缀来,指,指定特殊变,量,量,规则如,下,下:,_xxx_,表示系统定,义,义名字。,_xxx,表示类中的,私,私有变量名。,类的成员变,量,量可以分为,两,两种情况,,一,一种是公有,变,变量,一种,是,是私有变量,。,。公有变量,可,可以在类的,外,外部访问,,它,它是类与用,户,户之间交流,的,的接口。用,户,户可以通过,公,公有变量向,类,类中传递数,据,据,也可以,通,通过公有变,量,量获取类中,的,的数据。在,类,类的外部无,法,法访问私有,变,变量,从而,保,保证类的设,计,计思想和内,部,部结构并不,完,完全对外公,开,开。在,Python,中除了,_xxx,格式的成员,变,变量外,其,他,他的成员变,量,量都是公有,变,变量。,2.1.5,构造函数,构造函数是,类,类的一个特,殊,殊函数,它,拥,拥有一个固,定,定的名称,,即,即,_init_,(注意,函,数,数名是以两,个,个下划线开,头,头和两个下,划,划线结束的,),),.,当创建类的,对,对象实例时,系,系统会自动,调,调用构造函,数,数,通过构造函,数,数对类进行,初,初始化操作,。,。,【,例,2-4】,classMyString:,def _init_(self):,self.str=MyString,def output(self):,print(self.str);,s=MyString(),s.output(),【,例,2-5】,classUserInfo:,def _init_(self,name,pwd):,self.username=name,self._pwd=pwd,def output(self):,print(,用户:,+self.username+n,密码:,+self._pwd);,u=UserInfo(admin,123456),u.output(),2.2,类方法,类方法是,Python,的一个新概,念,念。类方法,具,具有如下特,性,性:,(,1,)与静态方,法,法一样,类,方,方法可以使,用,用类名调用,类,类方法。,(,2,)与静态方,法,法一样,类,成,成员方法也,无,无法访问实,例,例变量,但,可,可以访问类,的,的静态变量,。,。,(,3,)类方法需,传,传入代表本,类,类的,cls,参数。,使用装饰符,staticmethod,定义类方法,class,类名,:,classmethod,def,类方法名,(cls):,方法体,2.3,使用,instance(),函数判断对,象,象类型,使用,instance(),函数可以用,来,来检测一个,给,给定的对象,是,是否属于(,继,继承于)某,个,个类或类型,,,,如果是则,返,返回,True,;否则返回,False,。其使用方,法,法如下:,isinstance(,对象名,类名或类型,名,名,),如果对象名,属,属于指定的,类,类名或类型,名,名,则,instance(),函数返回,True,,否则返回,False,。,三类的继承和,多,多态,继承和多态,是,是面向对象,程,程序设计思,想,想的重要机,制,制。类可以继承,其,其他类的内,容,容,包括成,员,员变量和成,员,员函数。而从同一,个,个类中继承,得,得到的子类,也,也具有多态,性,性,即相同,的,的函数名在,不,不同子类中,有,有不同的实,现,现。就如同,子,子女会从父,母,母那里继承,到,到人类共有,的,的特性,而,子,子女也具有,自,自己的特性,。,。,在OOP程,序,序设计中,,当,当我们定义,一,一个class的时候,,,,可以从某,个,个现有的class继,承,承,新的class称,为,为子类(Subclass),,,,而被继承的class称,为,为基类、父,类,类或超类(Baseclass、Super class)。,3.1,继承,classAnimal(object):,def run(self):,print(Animal is running.),classDog(Animal):,pass,classCat(Animal):,pass,dog=Dog(),dog.run(),cat=Cat(),cat.run(),运行结果如,下,下:,Animal isrunning.,Animal isrunning.,继承有什么,好,好处?最大,的,的好处是子,类,类获得了父,类,类的全部功,能,能。由于Animial实现了run()方,法,法,因此,Dog和Cat作为它,的,的子类,什,么,么事也没干,,,,就自动拥,有,有了run()方法。,3.2,多态,当我们定义,一,一个class的时候,,,,我们实际,上,上就定义了,一,一种数据类,型,型。我们定,义,义的数据类,型,型和Python自带,的,的数据类型,,,,比如str、list、dict没什么两,样,样。举例如,下,下:,a=list()#a是list类,型,型,b=Animal()#b是Animal类型,c=Dog()#c是Dog类型,isinstance(a,list),True,isinstance(b,Animal),True,isinstance(c,Dog),True,看来a、b,、,、c确实对,应,应着list、Animal、Dog这3种,类,类型。,但是等等,,试,试试:,isinstance(c,Animal),True,看来c不仅,仅,仅是Dog,,,,c还是Animal,!,!,四思考题,1.小明和,小,小强都是张,老,老师的学生,,,,张老师的,生,生日是M月N日,2人,都,都不知道。,张,张老师的生,日,日是下列10组中的一,天,天,张老师,把,把M值告诉,了,了小明,把N值告诉了,小,小强,张老,师,师问他们知,道,道他的生日,是,是那一天吗,?,?,3月4日3月5日3月8日6月4日 6月7日,9月1日9月5日12月1日12月2,日,日 12月8日,小明说:如,果,果我不知道,的,的话,小强,肯,肯定也不知,道,道。小强说,:,:本来我也,不,不知道,但,是,是现在我知,道,道了。,小明说:哦,,,,那我也知,道,道了。请,根,根据以上对,话,话推断出张,老,老师的生日,是,是哪一天?,请,请说明理由,。,五总结,1.,思考学到了,哪,哪些东西?,2.,条理化,清,晰,晰化,3.,中间遇到了,哪,哪些问题,,怎,怎么解决和,处,处理,4.,主次分明,,舍,舍得舍得,5.,工具和方法,演讲完毕,,谢,谢谢观看!,
展开阅读全文