1、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中类的定义与使用,用知识的浪花去推动思考的风帆,用智慧的火星去点燃思想的火花,用浪漫的激情去创造美好的生活,用科学的力量去强
2、劲腾飞的翅膀,!,翟哥,复习,Python,的特点,本次主要知识点,一,面向对象程序设计基础,二,定义和使用类,三,类的继承和多态,四,思考题,五,总结,一,面向对象程序设计基础,1.3,给大家介绍对象,爬,跑,咬人,吃东西,睡觉,绿色,四条腿,10kg,有外壳,大嘴巴,对象,=,属性,+,方法,1.4,面向对象程序设计中的基本概念,(,1,)对象(,Object,):面向对象程序设计思想可以,将一组数据和与这组数据有关操作组装在一起,,形成一个实体,这个实体就是对象。,(,2,)类(,class,):,具有相同或相似性质的对象的抽象就是类,。因此,对象的抽象是类,类的具体化就是对象。例如,如
3、果人类是一个类,则一个具体的人就是一个对象。,(,3,)封装:,将数据和操作捆绑在一起,,定义一个新类的过程就是封装。,(,4,)继承:类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的关系。子类可以对基类的行为进行扩展、覆盖、重定义。如果人类是一个类,则可以定义一个子类“男人”。“男人”可以继承人类的属性(例如姓名、身高、年龄等)和方法(即动作。例如,吃饭和走路),在子类中就无需重复定义了。从同一个类中继承得到的子类也具有多态性,即相同的函数名在不同子类中有不同的实现。就如同子女会从父母那里继承到人类共有的特性,而子女也具有自己的特性。,(,5,),
4、方法:也称为成员函数,,是指对象上的操作,作为类声明的一部分来定义。方法定义了,可以对一个对象可以执行的操作,。,(,6,)构造函数:一种成员函数,来在创建对象时初始化对象。构造函数一般与它所属的类完全同名。,二,定义和使用类,2.1,声明类,2.2,类方法,2.3,使用,instance(),函数判断对象类型,2.1,声明类,在,Python,中,可以使用,class,关键字来声明一个类,其基本语法如下:,class,类名,:,成员变量,成员函数,同样,,Python,使用缩进标识类的定义代码,。,【,例,2-1】,class Person:,def SayHello(self):,prin
5、t(Hello!),2.1.1self,可以看到,在成员函数,SayHello(),中有一个参数,self,。这也是,类的成员函数(方法)与普通函数的主要区别,。类的成员函数,必须,有一个参数,self,,而且位于参数列表的开头。,self,就代表类的实例(对象)自身,,可以使用,self,引用类的属性和成员函数。在后面部分还会结合实际应用介绍,self,的使用方法。,2.1.2,定义类的对象,对象是类的实例,。如果人类是一个类的话,那么某个具体的人就是一个对象。只有定义了具体的对象,才能使用类。,Python,创建对象的方法如下:,对象名,=,类名,(),例如,下面的代码定义了一个类,Per
6、son,的对象,p,:,p=Person(),【,例,2-2】,class Person:,def SayHello(self):,print(Hello!);,p=Person(),p.SayHello(),运行结果如下:,Hello!,2.1.3,成员变量,【例,2-3,】,定义一个字符串类,MyString,,定义成员变量,str,,并同时对其赋初始值。,class MyString:,str=MyString,def output(self):,print(self.str),s=MyString(),s.output(),2.1.4Python,使用下划线作为变量前缀和后缀来指定特殊
7、变量,规则如下:,_xxx_,表示系统定义名字。,_xxx,表示类中的私有变量名,。,类的成员变量可以分为两种情况,一种是公有变量,一种是私有变量。公有变量可以在类的外部访问,它是类与用户之间交流的接口。用户可以通过公有变量向类中传递数据,也可以通过公有变量获取类中的数据。在类的外部无法访问私有变量,从而保证类的设计思想和内部结构并不完全对外公开。在,Python,中除了,_xxx,格式的成员变量外,其他的成员变量都是公有变量。,2.1.5,构造函数,构造函数是类的一个特殊函数,它拥有一个固定的名称,即,_init_,(注意,函数名是以两个下划线开头和两个下划线结束的),.,当创建类的对象实例
8、时系统会自动调用构造函数,,通过构造函数对类进行初始化操作。,【,例,2-4】,class MyString:,def _init_(self):,self.str=MyString,def output(self):,print(self.str);,s=MyString(),s.output(),【,例,2-5】,class UserInfo:,def _init_(self,name,pwd):,self.username=name,self._pwd=pwd,def output(self):,print(,用户:,+self.username+n,密码:,+self._pwd);,u
9、=UserInfo(admin,123456),u.output(),2.2,类方法,类方法是,Python,的一个新概念。类方法具有如下特性:,(,1,)与静态方法一样,类方法可以使用类名调用类方法。,(,2,)与静态方法一样,类成员方法也无法访问实例变量,但可以访问类的静态变量。,(,3,)类方法需传入代表本类的,cls,参数。,使用装饰符,staticmethod,定义类方法,class,类名,:,classmethod,def,类方法名,(cls):,方法体,2.3,使用,instance(),函数判断对象类型,使用,instance(),函数可以用来检测一个给定的对象是否属于(继承于
10、)某个类或类型,如果是则返回,True,;否则返回,False,。其使用方法如下:,isinstance(,对象名,类名或类型名,),如果对象名属于指定的类名或类型名,则,instance(),函数返回,True,,否则返回,False,。,三,类的继承和多态,继承和多态是面向对象程序设计思想的重要机制。,类可以继承其他类的内容,包括成员变量和成员函数,。而从同一个类中继承得到的子类也具有多态性,即相同的函数名在不同子类中有不同的实现。就如同子女会从父母那里继承到人类共有的特性,而子女也具有自己的特性。,在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的c
11、lass称为,子类,(Subclass),而,被继承的class称为基类、父类或超类,(Base class、Super class)。,3.1,继承,class Animal(object):,def run(self):,print(Animal is running.),class Dog(Animal):,pass,class Cat(Animal):,pass,dog=Dog(),dog.run(),cat=Cat(),cat.run(),运行结果如下:,Animal is running.,Animal is running.,继承有什么好处?最大的好处是子类获得了父类的全部功能。
12、由于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、Anima
13、l、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.,工具和方法,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100