第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx

上传人:牧羊曲112 文档编号:2105406 上传时间:2023-01-11 格式:PPTX 页数:27 大小:522.17KB
返回 下载 相关 举报
第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx_第1页
第1页 / 共27页
第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx_第2页
第2页 / 共27页
第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx_第3页
第3页 / 共27页
第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx_第4页
第4页 / 共27页
第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx》由会员分享,可在线阅读,更多相关《第8章PythonPytho程序设计基础教程 面向对象编程ppt课件.pptx(27页珍藏版)》请在三一办公上搜索。

1、2018.2,Python语言程序设计,南京邮电大学计算机学院,第8章 面向对象编程,学习目标,掌握定义类的方法掌握创建和使用对象的方法掌握类的继承的概念和使用方法,3,8.1 类和对象,面向对象编程是模拟人类认识事物的方式的编程方法,是最有效的编程方法之一。人类通过将事物进行分类来认识世界,比如,人类将自然界中的事物分类生物和非生物,又将生物分为动物、植物、微生物,又将动物分为有脊椎动物和无脊椎动物,继而又分为哺乳类、鸟类、鱼类、爬行类等,哺乳类又分为猫、狗、牛、羊等。每一个类的个体都具有一些共同的属性,在面向对象编程中,个体被称为对象,又称为实例。在本章的学习中,类、对象、实例是三个常用的

2、术语。,4,Person类的定义和实例化,接下来我们来定义人的类Person类,人有名字(name)、性别(gender)、体重(weight)等属性,根据这个说明,我们可以定义Person类并创建Person对象,如以下代码所示:,5,#代码块1:类的定义class Person:def _init_(self):self.name=韩信 self.gender=男 self.weight=70 print(An instance created),#代码块2:类的实例化p1=Person()print(p1.name)print(p1.gender)print(p1.weight),代码块

3、1定义了Person类,说明如下:class是定义类的关键字,Person是类名,在Python定义类的格式是“class 类名”,这是一个固定格式。这个类中只有一个函数,类中的函数也称为“方法”,该方法的名称为_init_,前面学到的有关函数的一切都适用于方法,唯一重要的差别是调用方法的方式。_init_()不是普通方法,是一个特殊的方法,其作用是:每当你根据Person 类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在与普通方法进行区分。,6,在_init_()方法的定义中,形参self 必不可少,还必须位于其他形参的前面。为何必

4、须在方法定义中包含形参self 呢?因为Python调用这个_init_()方法来创建Dog 实例时,将自动传入实参self,每个与类相关联的方法调用都自动传递实参self,让实例能够访问类中的属性和方法。我们创建Dog 实例时,Python将调用Person 类的方法_init_(),self 会自动传递,因此我们不需要传递它。_int_()方法中有三条赋值语句,定义了三个变量name、gender和weight,这三个变量都有前缀self。以self 为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。self.name=张三将变量name赋值为“韩信”,然后该

5、变量被关联到当前创建的实例。self.gender=男和self.weight=70的作用与此类似。像这样带有前缀self的、可通过实例访问的变量称为属性。,7,代码块2紧接在类Person的定义语句后面,是使用类Person创建对象的代码,创建了两个名为p1和p2的Person对象,也称为Person实例。代码块2的解释如下:使用Person()创建一个对象,并赋值给p1对象变量,p1是这个对象的对象名,在创建对象时自动调用Person类的_init_()方法。使用“.”号访问p1的属性,包括name、gender、weight,“.”符号是访问对象的属性和方法的特殊符号。,8,Person

6、类的完整定义,9,class Person:def _init_(self,name,gender,weight):self.name=name self.gender=gender self.weight=weight print(A person named%s is created%self.name)def eat(self,food):self.weight=self.weight+food print(%s eat%s food,and my weight is%d%(self.name,food,self.weight)def run(self):self.weight=self

7、.weight-1 print(%s runned,and my weight is%d%(self.name,self.weight)def say(self):print(My name is%s%(self.name),该代码重新定义了Person类,与上一节中定义的Person类不同的点如下:_init_()方法拥有除self外的三个参数:name、gender、weight,分别赋值给self.name、self.gener、self.weight。在创建Person对象的时候可以通过传不同的值创建不同的对象,如在代码块4中,通过p1=Person(韩信,男,70),创建一个名为韩信

8、,男性,体重70的Person对象,通过p2=Person(王昭君,女,50)创建一个名为王昭君,女性,体重50的Person对象。定义了eat()方法,该方法的参数是self和food:self表示当前调用eat()的对象,food是一个数字类型参数,表示吃进去的食物重量,通过self.weight=self.weight+food使得调用eat()方法的Person对象体重增加,如p1.eat(2)表示Person对象p1的体重增加2,同时显示信息。,10,定义了run()方法,该方法只有一个参数self,通过self.weight=self.weight-1使得调用run()的对象体重减

9、1,如p1.run(),表示Person对象p1通过跑步锻炼体重降低了1,同时显示信息。定义了say()方法,该方法只有一个参数self,通过print(My name is%s%(self.name)语句自我介绍,如p2.say(),输出“王昭君”,自我介绍。代码块4创建了两个不同的Person对象,分别是p1和p2,分别调用他们的eat()、run()、say()方法。,11,对象属性的默认值设置,可以为属性在_init_()方法中设置默认值,代码如下:,12,#例 8 3在类的定义中加入初始化代码def _init_(self,name,gender=男,weight=70):self.

10、_name=name self.gender=gender self.weight=weight print(A person named%s is created%self._name),对象属性的修改,13,#例 84属性值的添加、修改与删除示例p1=Person(安琪拉,女,45)p1.height=170p1.weight=46print(p1.height,p1.weight)del p1.heightprint(p1.height,p1.weight),其中:p1.height=70为对象p1添加了一个名为height的属性并赋值为70,height属性在Person类中没有定义,

11、只在p1对象中存在。p1.weight=46将对象p1的weight属性的值修改为46。del p1.height删除对象p1的height属性。,14,私有属性和私有方法,15,#例 85私有属性的使用示例class Person:def _init_(self,name,gender=男,weight=70):self._name=name self.gender=gender self._weight=weight print(A person named%s is created%self._name)def eat(self,food):self._setWeight(self._w

12、eight+food)print(%s eat%s food,and my weight is%d%(self._name,food,self._weight)def run(self):self._weight=self._weight-1 print(%s runned,and my weight is%d%(self._name,self._weight)def say(self):print(My name is%s%(self._name)def _setWeight(self,weight):self._weight=weight,以上代码定义了两个私有属性_name和_weigh

13、t,一个私有方法_setWeight(),“_”和“_”的不同之处在于:单下划线“_”开头:只是告诉别人这是私有属性,外部依然可以访问更改,所以p4._name可以正常访问;双下划线“_”开头:比如_weight属性不可通过p4._weight来访问或者更改,p4._setWeight(80)不可以调用,但是可以在类内部的方法调用,比如eat()方法调用了_setWeight()方法,run()方法修改了_weight属性。,16,类属性,17,#例 86类属性的使用示例#代码块7:类的定义class Person:count=0 def _init_(self,name,gender=男,w

14、eight=70):self._name=name self.gender=gender self._weight=weight Person.count=Person.count+1 print(A person named%s is created%self._name),8.2.类的继承,面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。继承完全可以理解成类之间的类型和子类型关系。,18,一个简单

15、的继承例子,19,class Person:def _init_(self,name,gender=男,weight=70):self.name=name self.gender=gender self.weight=weight print(A person named%s is created%self.name)def say(self):print(My name is%s%(self.name)class Teacher(Person):def teach(self,lesson):print(%s teachs%s%(self.name,lesson)class Student(P

16、erson):def study(self,lesson):print(%s studies%s%(self.name,lesson),关于以上代码的说明如下:定义了三个类:Person类、Teacher类、Student类。其中,Person类是基类,Teacher和Student继承了Person类,是其派生类,派生的语法分别是class Teacher(Person)和class Student(Person)。Person类拥有三个对象属性:name、gender、weight,一个初始化方法_int_(),一个普通对象方法say();Teacher类中只定义了一个对象方法teach(

17、);Student类只定义了一个对象方法study()。,20,由于Teacher和Student是Person的派生类,所以可以重用Person的三个属性和两个方法。在用t=Teacher(孔子,男,70)语句创建Teacher对象t的时候,也需要传入三个参数,自动调用基类Person的_init_()方法,创建Student对象同理。创建的Teacher对象t可以访问teach()方法,和基类中的say()方法,也可以访问基类中的name、gender、weight属性。,21,子类方法对父类方法的覆盖,22,class Person:def _init_(self,name,gender

18、=男,weight=70):self.name=name self.gender=gender self.weight=weight print(A person named%s is created%self.name)def say(self):print(My name is%s%(self.name)class Teacher(Person):def say(self):print(%s is a teacher%self.name)class Student(Person):def say(self):print(%s is a student%self.name),调用父类的同名方

19、法,23,class Person:def _init_(self,name,gender=男,weight=70):self.name=name self.gender=gender self.weight=weight print(A person named%s is created%self.name)def say(self):print(My name is%s%(self.name)class Teacher(Person):def _init_(self,name,gender=男,weight=70,title=讲师):Person._init_(self,name,gend

20、er,weight)self.title=title def say(self):Person.say(self)print(%s is a teacher%self.name)def teach(self,lesson):print(%s teachs%s%(self.name,lesson),在这个代码中,子类Teacher和子类Student中定义了与父类Person同名的方法_int_()方法和say()方法:子类Teacher中的_int_()方法传入四个参数:name、gender、weight、title,通过调用Person._init_(self,name,gender,we

21、ight)为父类Person中的三个属性赋值,title表示教师测职称,是Teacher类的专有对象属性。同理,子类Student的_init_()方法也传入四个参数,前三个为父类中的三个对应属性赋值,major表示学生的专业,是Student类的专有对象属性。子类Teacher中的say()中通过Person.say(self)语句调用了父类Person的say()方法介绍自己的姓名,随后通过print(%s is a teacher%self.name)语句调用说明自己是教师;同理,子类Student中的say()中通过调用父类的say()方法介绍自己的姓名,随后通过print(%s is

22、 a student%self.name)语句调用说明自己是学生。,24,因此,我们可以看出在Python中继承中的一些特点:在继承中基类的构造(_init_()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别在于类中调用普通函数时并不需要带上self参数。Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。,25,本章小结,通过本章的学习,我们学习了面向对象编程的相关知识,包括类的定义、对象的创建、对象的使用、类的继承、子类和父类的关系等。定义类的方法是使用class关键字,根据类可以创建对象,对象又称为类的实例,在创建对象时自动调用类的_init_()方法,如果有参数还需要传入参数。类中的属性和方法可以是私有的,也可以是私有的,私有属性和私有方法不能在类的外部被调用。一个类可以被继承产生派生类,派生类又称为子类,被派生的类被称为基类或父类。子类可以重用父类中的属性和方法,子类中的方法还会覆盖父类中的同名方法,在子类的方法中需要通过父类名访问父类中的同名方法。,26,27,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号