《Python程序设计》教学ppt课件—05面向对象编程.pptx

上传人:小飞机 文档编号:2167306 上传时间:2023-01-23 格式:PPTX 页数:67 大小:1.14MB
返回 下载 相关 举报
《Python程序设计》教学ppt课件—05面向对象编程.pptx_第1页
第1页 / 共67页
《Python程序设计》教学ppt课件—05面向对象编程.pptx_第2页
第2页 / 共67页
《Python程序设计》教学ppt课件—05面向对象编程.pptx_第3页
第3页 / 共67页
《Python程序设计》教学ppt课件—05面向对象编程.pptx_第4页
第4页 / 共67页
《Python程序设计》教学ppt课件—05面向对象编程.pptx_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《《Python程序设计》教学ppt课件—05面向对象编程.pptx》由会员分享,可在线阅读,更多相关《《Python程序设计》教学ppt课件—05面向对象编程.pptx(67页珍藏版)》请在三一办公上搜索。

1、,面向对象编程(Object Oriented Programming,OOP)是一种程序设计架构,同时也是一种程序开发的方法。,第5章 面向对象编程,目录,第5章 面向对象编程5.1 类和对象 5.1.1 类和对象的概念 5.1.2 类的定义 5.1.3 类的成员 5.1.4 创建对象 5.1.5 在类的内部调用实例方法 5.1.6 构造方法 5.1.7 类变量、实例变量及其作用域 5.1.8 实例方法、类方法和静态方法5.2 类的封装 5.2.1 封装的概念 5.2.2 用私有变量、私有方法实现封装 5.2.3 用property装饰器定义属性实现封装,5.3 类的继承 5.3.1 继承的

2、概念 5.3.2 使用继承 5.3.3 重写方法 5.3.4 派生属性或方法 5.3.5 多重继承5.4 类的多态 5.4.1 多态的实现 5.4.2 多态性5.5 习题,5.1 类和对象,5.1.1 类和对象的概念对象(Object)抽象为类(Class)的过程,是在系统分析阶段完成的。在现实世界中,先有一个一个具体的对象,然后将对象进行分类,总结出类。在程序中,必须先定义类,后调用类来产生对象。类并不能直接使用,通过类创建出的实例(又称对象)才能使用。,5.1 类和对象,5.1.2 类的定义在编程时,使用类的顺序是:先定义(创建)类,然后再创建类的对象(实例),通过对象实现特定的功能。Py

3、thon中,创建一个类使用class关键字实现,其基本语法格式如下:class 类名:类的成员1 类的成员n,5.1.3 类的成员在类的定义中,类的成员可以分为3种:类变量、方法和属性。属性在“5.2类的封装”介绍,这里先介绍类变量和方法。1类变量Python中,类中的变量分为:类变量和实例变量。这里介绍类变量。在类体中定义的变量称为类变量(也称类字段、成员字段、成员变量),类变量也是广义上的属性,称为类属性。格式如下。class 类名:类变量名=初值 类的其他成员说明:1)类变量是指在类中,且在方法之外定义的变量。2)初值表示该字段的初始状态,例如:student_age=18#年龄,整型,

4、初值18岁,5.1 类和对象,2实例方法在类的内部,使用def关键字定义实例方法,语法格式如下。class 类名:类变量名=值 def 方法名(self,形参1,形参2,形参n)self.实例变量名=值 变量名=值 方法体 return 表达式 类的其他成员实例方法必须包含参数self,且为第一个参数,不能省略。,5.1 类和对象,5.1 类和对象,【例5-1】定义学生类Student。属性:姓名name、性别gender、年龄age、班级grade。方法:显示学习的课程learn(course),course是显示的课程名称;显示考试的课程exam(course,score),course是

5、课程,score是成绩。class Student:#定义类#定义类变量 name=#姓名 gender=男#性别,默认“男”age=18#年龄,默认18岁 grade=#班级#定义实例方法 def info(self):print(self.name,self.gender,self.age,self.grade)#在方法中访问类变量使用self关键字 def learn(this,course):#获取学习课程字符串的方法,形参course代表课程 return this.name+正在学习+course#self可以换成任何标识符,这里是this def exam(self,course

6、,score):#获取考试课程字符串的方法,形参course代表课程,score代表成绩 string=self.name+course+的考试成绩是+str(score)#定义局部变量string return string,5.1 类和对象,【例5-2】计算长方体的体积和表面积。定义长方体类Cuboid。属性:长length、宽width、高height。方法:计算长方体的体积cubage,长方体的体积=长宽高;计算长方体的表面积totalArea,长方体的表面积=(长宽+长高宽高)2。class Cuboid:#定义类变量 length=0#长 width=0#宽 height=0#高#

7、定义实例方法 def cubage(self):#计算长方体的体积 return self.length*self.width*self.height def total_area(self):#计算长方体的表面积 return(self.length*self.width+self.length*self.height+self.width*self.height)*2,5.1 类和对象,【例5-2】计算长方体的体积和表面积。定义长方体类Cuboid。属性:长length、宽width、高height。方法:计算长方体的体积cubage,长方体的体积=长宽高;计算长方体的表面积totalAr

8、ea,长方体的表面积=(长宽+长高宽高)2。也可以把方法改成传参的形式,代码如下:class Cuboid1:#定义实例方法 def cubage(self,length,width,height):#计算长方体的体积,形参:长,宽,高 return length*width*height def total_area(self,length,width,height):#计算长方体的表面积,形参:长,宽,高 return(length*width+length*height+width*height)*2,5.1.4 创建对象1创建对象创建类的实例也称实例化一个类的对象,简称创建对象。对已创

9、建的类进行实例化,其语法格式如下:类名()创建的对象或实例赋值给一个变量,赋值后该变量就表示这个类的一个对象。其格式为:变量名(或称对象名)=类名()例如,下面的代码创建Student类的实例,并赋给stu对象,对stu对象进行初始化。stu=Student()#创建Student类的实例,并赋值给stu变量,stu变量的类型是类Student的类型,5.1 类和对象,2.对象访问实例变量和实例方法(1)对象访问实例变量在主程序中(或类的外部),使用已创建的对象访问类中变量(实例变量或类变量)的语法格式如下:对象名.变量名注意:实例变量只能通过“对象名.实例变量名”访问,无法通过“类名.实例变

10、量名”访问。为对象中的变量(实例变量或类变量)赋值的语法格式如下:对象名.变量名=值(2)对象访问实例方法访问对象中实例方法的语法格式如下:对象名.方法名(实参1,实参2,实参n)注意:对象名与实例变量名、方法名之间用点“.”连接。,5.1 类和对象,3.类和对象应用示例【例5-3】通过在例5-1中已经定义的类,创建两个对象,分别是“刘强”和“王芳”。liuqiang=Student()#创建Student()类的一个对象,并赋值给liuqiang变量#初始化类变量liuqiang.name=刘强#用“对象名.类变量”访问liuqiang.age=19liuqiang.grade=计算机科学2

11、019#调用方法liuqiang.info()#显示liuqiang对象的基本信息print(liuqiang.learn(数学)print(liuqiang.exam(数学,85)print()#显示一个空行,用于隔开两位学生的信息wangfang=Student()#创建Student()类的一个对象,并赋值给wangfang变量#初始化类变量wangfang.name=王芳 wangfang.gender=女wangfang.age=18wangfang.grade=哲学2019,5.1 类和对象,5.1 类和对象,#调用方法wangfang.info()print(wangfang.l

12、earn(英语)print(wangfang.exam(英语,96),【例5-4】在例5-2定义类的基础上,编写创建对象和调用属性、方法的代码。cu=Cuboid()#Cuboid()类的一个对象,并赋值给cu变量cu.length=10#长cu.width=20#宽cu.height=30#高print(cu.cubage()print(cu.total_area()调用Cuboid1()中带参数的方法,代码如下:cu1=Cuboid1()#Cuboid1()类的一个对象,并赋值给cu1变量print(cu1.cubage(10,20,30)print(cu1.total_area(10,2

13、0,30),5.1 类和对象,5.1.5 在类的内部调用实例方法在类的内部调用实例方法的格式为:self.方法名(实参1,实参2,实参n)或类名.方法名(self,实参1,实参2,实参n)在类的内部调用实例方法,如果不使用类名调用方法,则方法名前使用self;如果使用类名调用方法,则实参列表中使用self。【例5-5】在类的内部和外部调用实例方法示例。class Human:def eat(self,name):self.name=name#把形参name赋值给创建的实例变量self.name print(eat and%s%self.name)def drink(self):self.eat

14、(drink)#在类中访问方法:self.方法名()Human.eat(self,drink)#在类中调用方法:类名.方法名(self)man=Human()#创建对象man.drink()#在类外调用方法,对象调用方法:对象名.方法名(),5.1 类和对象,5.1.6 构造方法1.构造方法的概念当创建一个对象时,对象表示一个实体。例如,下面的代码st=Student()#创建对象st.name=张三#设置属性值,使该对象的name值为张三st.age=18#设置属性值,使该对象的age值为18构造方法又叫构造函数、构造器,它是类的一种特殊的成员方法,在创建类的新对象时自动调用构造方法。它主要

15、用于在创建对象时初始化对象,即为对象成员变量赋初始值。2.定义构造方法在创建类时,可以添加一个_init_()方法。该方法是一个特殊的类实例方法,称为构造方法。每个类都必须至少有一个构造方法。构造方法的语法格式如下:def _init_(self,形参1,形参2,形参n):self.实例变量名1=值1 self.实例变量名2=值2 方法体构造方法是类的一个特殊的成员方法,除了具有一般成员方法的特点外,它还有自己独有的特点。,5.1 类和对象,5.1 类和对象,3.调用构造方法在声明类时,一个类中会包默认的构造方法,也可能包含自定义构造方法。(1)调用默认构造方法假设一个类包含默认的构造方法,则

16、调用默认构造方法的语法如下。对象名=类名()(2)调用自定义构造方法自定义构造方法包括无参或有参构造函数。1)调用自定义无参构造方法。自定义无参构造方法的调用与默认构造方法的调用相同。2)调用有参构造方法。调用有参构造方法的语法如下。对象名=类名(实参1,实参2,实参n)实参列表中的参数可以是数据对象、变量或表达式,参数之间用逗号分隔。例如,如下代码在创建Student对象时传入参数:st=Student(张三丰,18)print(st.name,st.age),5.1 类和对象,4.构造方法实例【例5-6】在Student类的_init_()方法中,定义两个实例变量gender和age,并且

17、直接赋值。在创建Student的对象st时,采用无参数创建对象,它会隐式调用_init_()方法,然后Student类的对象st中的实例变量就被赋值了。class Student:def _init_(self):#定义无参构造方法 print(调用构造方法)self.gender=男#self.gender表示gender是实例变量,通过“=”创建该实例变量 self.age=18st=Student()#创建对象,构造方法无参数print(st的性别:0,年龄:1.format(st.gender,st.age),5.1 类和对象,【例5-7】用_init_()方法传递参数。class S

18、tudent:def _init_(self,name,gender,age):#定义有参构造方法,小括号中是定义的形参名 print(调用构造方法)self.name=name#“=”左边的name是定义的实例变量,右边的name是形参名 self.gender=gender self.age=agest=Student(王芳,女,19)#有参数创建对象print(st的姓名:0,性别:1,年龄:2.format(st.name,st.gender,st.age),5.1 类和对象,【例5-8】对例5-2中的类,用_init_()方法重新定义类。class Cuboid:def _init_

19、(self,length,width,height):self.length=length#实例变量作为属性用 self.width=width self.height=height def cubage(self):#计算长方体的体积 return self.length*self.width*self.height#访问实例变量 def total_area(self):#计算长方体的表面积 return(self.length*self.width+self.length*self.height+self.width*self.height)*2if _name_=_main_:cu=C

20、uboid(10,20,30)#创建对象,用构造方法的参数初始化 print(cu.cubage()print(cu.total_area(),5.1 类和对象,【例5-9】定义一个两个数的加法类NumberAdd,通过_init_()方法初始化两个数,定义一个实例方法add()计算两个数的和。class NumberAdd:a=5#定义在类中但在函数体外的变量为类变量 def _init_(self,a,b):self.x=a#self.x、self.y是实例变量 self.y=b#a、b是形参,a、b是本方法内的局部变量 print(a=0,b=1.format(a,b)print(sel

21、f.x=0,self.y=1.format(self.x,self.y)print(self.a=,self.a)def add(self):#定义两个数相加的方法 sum=self.x+self.y#在类内访问实例变量 return sum print(a=,a)#显示类变量a的值if _name_=_main_:a=10#加数 b=20#被加数 number=NumberAdd(a,b)#创建对象并初始化 print(0+1=2.format(a,b,number.add()#显示两个数的和,运行结果如下:a=5a=10,b=20self.x=10,self.y=20self.a=510+

22、20=30,5.1 类和对象,5.1.7 类变量、实例变量及其作用域1.类变量类变量是指在类中且在方法之外定义的变量。在主程序中(或类的外部),类变量推荐用“类名.类变量名”访问,但也可以使用“对象名.类变量名”访问(此方式不推荐使用,即类变量通常不作为实例变量使用)。【例5-10】访问例5-1中定义的类变量name、gender、age和grade。Student.name=刘强#用“类名.类变量”访问Student.gender=男Student.age=19Student.grade=计算机科学2019,5.1 类和对象,2.实例变量从实例化的角度来说,实例变量的定义为,实例化之后,每个

23、实例(对象)单独拥有的变量叫作实例变量。实例变量是与某个类的实例相关联的数据值,这些值独立于其他实例或类。注意,实例变量只能通过对象名访问,无法通过类名直接访问。在方法中,只要以self定义的变量都是实例变量。实例变量的定义如下:self.变量名=值调用实例变量有如下两种方式。1)在类外通过对象直接调用。2)在类内通过self间接调用。,5.1 类和对象,【例5-11】类变量和实例变量在访问和赋值后的不同。class Demo:aa=我是类变量aa def func(self,name):self.bb=name#bb是实例变量if _name_=_main_:print(Demo.aa=,D

24、emo.aa)Demo.aa=Demo类,为类变量aa第1次赋值 obj1=Demo()#创建对象obj1#obj1.aa=obj1对象,为实例变量aa赋值#稍后取消注释 obj1.func(obj1对象,为实例变量bb赋值)print(Demo.aa=,Demo.aa)#显示类变量Demo.aa的值 print(obj1.aa=,obj1.aa)#显示对象obj1.aa的值 print(obj1.bb=,obj1.bb)#显示对象obj1.bb的值 print()obj2=Demo()#创建对象obj2,5.1 类和对象,#obj2.aa=obj2对象,为实例变量aa赋值#稍后取消注释 ob

25、j2.func(obj2对象,为实例变量bb赋值)Demo.aa=Demo类,为类变量aa第2次赋值 print(Demo.aa=,Demo.aa)#访问Demo.aa print(obj2.aa=,obj2.aa)#访问obj2.aa print(obj2.bb=,obj2.bb)#访问obj2.bb print()print(id(Demo.aa)=,id(Demo.aa)#显示内存中的地址 print(id(obj1.aa)=,id(obj1.aa)print(id(obj2.aa)=,id(obj2.aa),5.1 类和对象,3.实例变量的作用域私有成员在类的外部不能直接访问,如果要在

26、类的外部访问,只能通过调用类里面的公有成员方法间接访问,或者通过Python支持的特殊方式访问。【例5-12】在_init_()方法中初始化一个实例变量及一个私有的实例变量。定义一个给实例变量赋值的方法、一个给私有变量赋值的方法、一个得到实例变量的方法,以及一个得到私有变量的方法。,5.1 类和对象,class Test:def _init_(self,x,y):self._x=x#定义实例变量 self._y=y#定义私有的实例变量 def setX(self,x):self._x=x#给实例变量赋值 def setY(self,y):self._y=y#给私有的实例变量赋值 def get

27、X(self):return self._x#得到实例变量 def getY(self):return self._y#得到私有的实例变量 def show(self):print(self._x=,self._x)#在类内访问实例变量 print(self._y=,self._y)#在类内访问私有的实例变量if _name_=_main_:t=Test(2,3)#创建对象并初始化 print(创建对象并初始化后显示_x,_y(2,3)的值)print(t._x)#在类外访问实例变量 print(t._y)#在类外访问对象的私有变量,5.1 类和对象,把类外的程序改为如下。if _name_=

28、_main_:t=Test(2,3)#创建对象并初始化 print(创建对象并初始化后显示_x,_y(2,3)的值)t.show()#调用实例方法t.show()print(t.getX(),t.getY()#调用实例方法t.getX(),t.getY()t._x=4#给实例变量赋值 t._y=5#这里实际是新建了一个与私有变量_y同名的变量 print(给变量赋值后显示_x,_y(4,5)的值(_y的值没有变))t.show()#self._y的显示结果仍是3 print(t.getX(),t.getY()t.setX(6)t.setY(7)#用方法给私有变量赋值,赋值成功 print(用方

29、法设置值后显示_x,_y(6,7)的值)t.show()print(t.getX(),t.getY()print(t._Test_y)#用特殊方法访问私有变量,5.1 类和对象,运行显示结果如下:创建对象并初始化后显示_x,_y(2,3)的值self._x=2self._y=32 3给变量赋值后显示_x,_y(4,5)的值(_y的值没有变)self._x=4self._y=34 3用方法设置值后显示_x,_y(6,7)的值self._x=6self._y=76 77,5.1 类和对象,在Python中,以下画线开头的变量名和方法名有特殊的含义,尤其是在类的定义中,用下画线作为变量名和方法名前缀

30、和后缀来表示类的特殊成员。1)_:这样的变量名或方法名叫保护成员,不能用“from module import*”导入,只有类对象和子类对象能访问。2)_:系统定义的特殊成员。3)_:类中的私有成员,只有类对象自己能访问,子类对象也不能访问这个成员,但在对象外部可以通过“对象名._类名_”这样的特殊方式来访问。也就是说,Python中不存在严格意义上的私有成员。在IDLE的文件方式或交互方式中,在对象或类名后输入一个小数点“.”后等3秒钟,则会显示一个列表框,列出其所有公开成员,如图5-5所示,模块也具有同样的特点。如果在小数点“.”后面再加一个下画线,则会在列表框中列出该对象或类的所有成员,

31、包括私有成员,如图5-6所示。,5.1 类和对象,5.1.8 实例方法、类方法和静态方法1.实例方法在定义方法时,如果方法的形参以self作为第一个参数,则该方法为实例方法(也称普通方法)。构造方法也属于实例方法,只不过它比较特殊。在类内,分别使用“self.类变量名”和“self.实例变量名”访问类变量和实例变量。2.类方法在定义方法时,如果方法的形参以cls作为第一个参数,并且使用classmethod修饰,则该方法为类方法。注意,如果没有classmethod修饰,则Python解释器会将该方法认定为实例方法,而不是类方法。在类方法内,使用“cls.类变量名”访问类变量,但是不能访问实例

32、变量。3.静态方法在定义方法时,如果不设置默认参数,并且使用staticmethod修饰,则该方法为静态方法。静态方法其实就是函数,它与函数的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。静态方法没有self、cls等特殊参数。静态方法可以通过类名或实例对象名来调用。,5.1 类和对象,【例5-13】在Person类中定义实例方法、类方法、静态方法,然后用类名、对象名访问这些方法。class Person:gender=Male#定义类变量(静态的变量)def _init_(self,name=Jack,age=18):#构造方法也属于实例方

33、法 self.name=name#定义实例变量 self.age=age def show(self):#定义实例方法 return 实例方法show:+self.name+self.gender+str(self.age)#类内访问实例变量、类变量 classmethod#classmethod修饰的方法是类方法 def eat(cls,name,age):eat_name=name#类方法内无法访问实例变量 eat_gender=cls.gender#使用“cls.类变量名”访问类变量 eat_age=str(age)#方法内定义的变量,类外不可用 return 类方法eat:+eat_n

34、ame+eat_gender+eat_age classmethod#classmethod修饰的方法是类方法 def run(cls):return 类方法run:+str(cls),staticmethod#staticmethod修饰的方法是静态方法 def sleep(a):#s=self.x+self.name#静态方法内无法访问类变量和实例变量 s=zZ#+a#方法内定义的变量,类外不可用 return 静态方法sleep:+sprint(用类名调用,Person.eat(Jack,18)#用类名调用方法,Person类会自动绑定到第一个参数print(用类名调用,Person.r

35、un()#用类名调用类方法,Person类会自动绑定到第一个参数print(用类名调用,Person.sleep(ZZZ.)#用类名调用静态方法per=Person(Jenny,19)#创建对象print(用对象名调用,per.eat(Jenny,19)#用对象调用eat()类方法,其实依然是使用类调用print(用对象名调用,per.run()#因此第一个参数依然被自动绑定到Person类print(用对象名调用,per.sleep(zzz.)#用对象调用静态方法print(用对象名调用,per.show()#用对象调用show()实例方法运行结果为:用类名调用 类方法eat:JackMal

36、e18用类名调用 类方法run:用类名调用 静态方法sleep:zZ#ZZZ.用对象名调用 类方法eat:JennyMale19用对象名调用 类方法run:用对象名调用 静态方法sleep:zZ#zzz.用对象名调用 实例方法show:JennyMale19,5.1 类和对象,5.2.1 封装的概念封装实际上有两个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。由于Python并没有提供类似于其他程序语言的private等的修饰符,因此Python并不能真正支持隐藏。Python中的封装有两种方法:1)用私有变量、私有方法实现封装。2)用property装饰器定义属性实现封装。5.2.2

37、用私有变量、私有方法实现封装Python不能真正支持隐藏。为了隐藏类中的成员,Python行业建议将类的成员命名为以双下画线开头,这样程序员在看到双下划线开头的属性时,就知道是隐藏属性,也就不在外部访问了。,5.2 类的封装,【例5-14】定义长方形类Rectangle,在构造方法中设置私有实例变量宽_width和高_height。分别对宽、高定义get方法、set方法、del方法。再定义一个计算面积的方法area()。class Rectangle:#定义长方形类 def _init_(self,width=0,height=0):#定义构造方法 self._width=width#创建实例

38、变量,宽 self._height=height#创建实例变量,高 def getwidth(self):#定义getwidth()方法,返回宽 return self._width def setwidth(self,width):#定义setwidth()方法,设置宽 self._width=width def delwidth(self):#定义delwidth()方法 self._width=0 def getheight(self):#定义getheight()方法,返回高 return self._height def setheight(self,height):#定义sethe

39、ight()方法,设置高 self._height=height def delheight(self):#定义delheight()方法 self._height=0,5.2 类的封装,5.2 类的封装,def area(self):#定义计算面积的方法area()return self._width*self._height#按设置的宽、高计算面积rect=Rectangle()#创建对象,用默认值初始化实例rect.setwidth(20)#设置宽rect.setheight(30)#设置高print(rect.getwidth()#得到宽print(rect.getheight()#得

40、到高print(rect.area()#计算面积运行结果如下:2030600,5.2 类的封装,5.2.3 用property装饰器定义属性实现封装1.用property装饰器定义属性(推荐)定义方法时,使用property装饰器可以把一个实例方法变成其同名属性,以支持“对象名.属性名”的访问。用property定义属性的语法格式如下:property#定义只读属性def 属性名(self)代码块1属性名.setter#定义可修改属性def 属性名(self,value):代码块2属性名.deleter#定义删除属性def 属性名(self):代码块3,【例5-15】把例5-14改成用prop

41、erty装饰器定义属性。class Rectangle:#定义长方形类 def _init_(self,width=0,height=0):#定义构造方法 self._width=width#创建实例变量,宽 self._height=height#创建实例变量,高 property def width(self):#定义只读属性width,返回宽 return self._width width.setter def width(self,width):#定义设置属性width,设置宽 self._width=width width.deleter def width(self):#定义删除

42、属性width self._width=0 property def height(self):#定义只读属性height,返回高 return self._height,5.2 类的封装,height.setter def height(self,height):#定义设置属性height,设置高 self._height=height height.deleter def height(self):#定义删除属性height self._height=0 def area(self):#定义计算面积的方法area()return self._width*self._height#按设置的宽

43、、高计算面积rect=Rectangle()#创建对象,用默认值初始化实例rect.width=20#用属性设置宽rect.height=30#用属性设置高print(rect.width=,rect.width)#得到宽print(rect.height=,rect.height)#得到高print(rect.area()=,rect.area()#计算面积print(rect._Rectangle_width)#访问私有变量运行程序的结果如下:rect.width=20rect.height=30rect.area()=60020,5.2 类的封装,5.2 类的封装,【例5-16】对设定的

44、属性值进行数据校验,并给出相应的提示。class Student(object):def _init_(self,name,age):self._name=name self._age=age self._weight=45 property def name(self):return self._name name.setter def name(self,value):if type(value)=str:self._name=value else:self._name=No name.property def age(self):return self._age,5.2 类的封装,age

45、.setter def age(self,value):if value 0 and value 100:self._age=value else:self._age=invalid age value.property def weight(self):return self._weight weight.setter def weight(self,value):self._weight=value;t=Student(Tom,19)print(Name:,t.name)print(Age:,t.age)print(weight:,t.weight)print(-*50)t.name=Ja

46、ck,t.age=300t.weight=50print(Name:,t.name)print(Age:,t.age)print(weight:,t.weight)运行结果如下:Name:TomAge:19weight:45-Name:JackAge:invalid age value.weight:50,5.2 类的封装,2.用property()函数定义属性用property()函数定义属性的语法格式如下:属性名=property(get方法名,set方法名,del方法名,描述信息)【例5-17】如下程序中,使用property()函数定义一个width属性,在定义该属性时传入4个参数,设

47、置该属性可读、可写、可删除,也有说明文档。class Rectangle:#定义长方形类 def _init_(self,width=0,height=0):#定义构造方法 self._width=width#创建实例变量,宽 self._height=height#创建实例变量,高 def getwidth(self):#定义getwidth()方法,返回宽 return self._width def setwidth(self,width):#定义setwidth()方法,设置宽 self._width=width def delwidth(self):#定义delwidth()方法 s

48、elf._width=0 width=property(getwidth,setwidth,delwidth,矩形的宽属性)#使用property定义width属性,5.2 类的封装,def getheight(self):#定义getsize()方法,返回高 return self._height def setheight(self,height):#定义setheight()方法,设置高 self._height=height def delheight(self):#定义delheight()方法 self._height=0 height=property(getheight,set

49、height,delheight,矩形的高属性)#使用property定义height属性 def area(self):#定义计算面积的方法area()return self._width*self._height#按设置的宽、高计算面积print(访问width属性的说明文档:,Rectangle.width._doc_)#访问width属性的说明文档print(通过内置的help()函数查看Rectangle.width的说明文档:)help(Rectangle.width)#通过内置的help()函数查看Rectangle.width的说明文档rect=Rectangle(10,20)

50、#创建对象,并初始化实例print(rect.width=,rect.width)#访问rect的width属性rect.width=30#对rect的width属性赋值print(rect._width=,rect._width)#访问rect的_width实例变量print(rect._height=,rect._height)#访问rect的_height实例变量print(rect.area()=,rect.area()#计算面积,5.2 类的封装,del rect.width#删除rect的width属性print(rect._width=,rect._width)#访问rect的_

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号