您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 第9章-Python中的面向对象
第9章Python中的面向对象手把手教你学Python(进阶篇)主要内容CONTENTS02类中的变量03类中的方法04类的继承01类和对象01类和对象Python中的面向对象面向对象思想面向对象是相对于面向过程而言的,它是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段的产物。面向过程编程主要是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用函数即可。面向对象编程则是分析出需求中涉及到哪些对象,这些对象各自有哪些特征、有什么功能,对象之间存在何种关系等,将存在共性的事物或关系抽象成类。最后通过对象的组合和调用完成需求。面向过程编程性能更高,适合于简单系统,容易理解。面向对象编程易维护、易扩展、易复用,适合于复杂系统,灵活方便。Python中的面向对象类和对象对象是指实实在在存在的各种事物,例如桌子、汽车、学生等。对象通常包含两部分信息:属性和行为。一般使用变量表示对象的属性,用函数或方法表示对象的行为。现实世界中,先有对象后有类;而在计算机的世界里,先有类后有对象。在面向对象程序设计中,先在类中定义共同的属性和行为,然后通过类创建具有特定属性值和行为的实例,这便是对象。大部分时候,定义一个类就是为了重复创建该类的实例,同一个类的多个实例具有相同的特征,而类则是定义了多个实例的共同特征。类不是一种具体存在,实例才是具体存在。类是用来描述一组具有相同属性和行为的对象的模板,是对这组对象的概括、归纳和抽象表达。Python中的面向对象类的定义在Python中,通过class关键字定义类,然后通过定义的类创建实例对象。在Python中定义类的语法如下所示:class类名:类属性1……类属性n方法定义1……方法定义n定义类时,需使用class关键字;class关键字后是类名,名字由用户自由指定,通常首字母大写,见名知意;类名后跟冒号,类体由缩进的语句块组成。类的成员分为两种类型:描述属性的数据成员和描述行为的函数成员。类中通常包含一个特殊方法:__init__。它在创建和初始化一个新对象时被系统自动调用,初始化方法用于完成对象的初始化工作,如成员变量赋值等。Python中的面向对象类的定义classRectangle:def__init__(self,width,height):#定义初始化方法,指定宽度和高度self.width=width#定义数据成员宽度self.height=height#定义数据成员高度defget_area(self):#定义方法获取矩形的面积returnself.width*self.heightdefget_perimeter(self):#定义方法获取矩形的周长return2*(self.width+self.height)定义一个矩形类,包含两个数据成员:矩形的宽度和矩形的高度,提供两个方法:获取矩形的面积和获取矩形的周长。类中定义的每个方法都有一个名为self的参数,该参数必须是方法的第一个参数,self表示当前对象,即指向调用方法的对象。Python中的面向对象创建类的对象类是一种抽象的概念,要使用类定义的功能,就必须进行类的实例化,即创建类的对象。例如矩形是一种抽象概念,长为5宽为3的矩形就是具体的矩形对象。创建类的对象的方式类似函数调用方式:对象名=类名(参数列表)注意:程序通过类的__init__()方法接受(参数列表)中的参数,参数列表中的参数要与__init__()方法中除了self以外的参数匹配。调用对象的属性和方法的格式:对象名.对象的属性对象名.对象的方法()rect_1=Rectangle(3,5)#创建矩形对象print(矩形的宽度为:,rect_1.width)print(矩形的高度为:,rect_1.height)print(矩形面积为:,rect_1.get_area())print(矩形周长为:,rect_1.get_perimeter())设计一个表示圆的类:Circle,这个类包含一个实例成员变量:半径,包含两个方法:求面积的方法、求周长的方法。利用这个类创建半径为1~10的圆,并打印出相应的信息,运行效果如图所示,保留两位小数。课后练习题02类中的变量Python中的面向对象类中的变量成员变量用于存储描述类或对象属性的值,根据位置不同可分为:类变量和实例变量。成员变量可以被该类中定义的方法访问,也可以在外部通过对象进行访问,而在方法体中定义的局部变量,则只能在方法内进行访问。实例变量在方法内部通过“self.变量名”定义的变量,注意和局部变量的区别,实例变量在类的内部通过“self.变量名”访问,在外部通过“对象名.变量名”来访问。实例变量一般是在__init__()方法中进行初始化,self.变量名=__init__()方法传递过来的实参。也可以在其他方法中定义或创建对象后添加,但不建议。importtimeclassStudent:def__init__(self,name):self.name=nameinit_time=time.strftime(%Y-%m-%d%H:%M:%S)print(init_time)defset_major(self,major):self.major=majorPython中的面向对象成员变量在Python中可通过dir(对象)查看该对象所有的成员名称。直接访问一个不存在的实例变量时,将会抛出属性异常:AttributeError。直接对一个不存在的实例变量赋值,将会为该对象添加一个实例变量。有点类似于字典中键的操作。s_1=Student(张三)#创建对象print(dir(s_1))s_1.set_major(计算机)#调用方法print(dir(s_1))s_1.num=007#新增实例变量print(dir(s_1))print(s_1.sex)#访问不存在的实例变量注意:如果实例变量名以两个下划线开始,即“__变量名”,表示该变量属于私有变量,只允许在这个类的内部调用,在外部无法直接调用。Python中的面向对象成员变量类变量在类中所有方法之外定义的变量,可以在所有实例之间共享,类变量可以通过“类名.类变量名”进行访问,也可以通过“对象名.类变量名”进行访问,但一般不建议这么做。classStudent:count=0def__init__(self,name):self.name=nameStudent.count=Student.count+1s_1=Student(张三)#创建对象s_2=Student(李四)#创建对象print(Student.count)print(s_1.count)print(s_2.count)直接访问一个不存在的类变量时,将会抛出属性异常:AttributeError。直接对一个不存在的类变量赋值,将会为该类添加一个类变量。#print(Student.num)#抛出异常Student.num=5#添加类变量print(s_2.num)Python中的面向对象成员变量当类变量名和实例变量名相同时,通过“对象名.变量名”访问时,访问的是实例变量。如果确实想要访问类变量,只能通过“类名.类变量名”。注意:对类变量的赋值只能通过“类名.类变量名”来执行,对“对象名.类变量名”进行赋值相当于创建了一个同名的实例变量。Student.count=8print(s_1.count)print(s_2.count)s_1.count=8print(s_1.count)print(s_2.count)VS如果类变量名以两个下划线开始,即“__类变量名”,表示该变量属于私有变量,只允许在这个类的内部调用,在外部无法直接调用。Python中的面向对象classPerson:def__init__(self,name=未知,age=18):self.name=name#公有成员变量self.__age=age#私有成员变量@propertydefage(self):returnself.__age@age.setterdefage(self,new_age):ifnew_age1ornew_age120:print(年龄范围不对!)else:self.__age=new_age@age.deleterdefage(self):delself.__agePython中提供@property装饰器把类中的方法“装饰”成属性使用,@property装饰器默认提供一个读取成员变量值的接口,如果需要修改成员变量的值可搭配使用@属性名.setter装饰器,如果需要删除成员变量可搭配使用@属性名.deleter装饰器。p=Person(张三,20,男)p.age=23print(p.age)装饰器课后练习题阅读下列程序代码,思考程序执行结果。t_1=Test(5)t_2=Test(8)t_1.print()t_2.print()t_1=Test(5)t_2=Test(8)t_1.count=12t_1.print()t_2.print()t_1=Test(5)t_2=Test(8)Test.count=12t_1.print()t_2.print()classTest:count=0def__init__(self,num=10):Test.count=Test.count+1self.__num=numdefprint(self):print(count=,self.count)print(num=,self.__num)t_1=Test(5)t_2=Test(8)t_1.__num=15t_1.print()t_2.print()t_1=Test(5)t_2=Test(8)t_1._Test__num=15t_1.print()t_2.print()①②③④⑤03类中的方法Python中的面向对象类的方法方法是与类相关的函数,类中方法的定义与普通的函数大致相同。类中定义的方法大致分为三类:实例方法、类方法和静态方法。实例方法:至少包含一个对象参数,在内部通过“self.方法()”调用,在外部通过“对象名.方法()”调用,执行时,自动将调用方法的对象作为参数传入;类方法:至少包含一个类参数,由类调用,调用类方法时,自动将调用该方法的类作为参数传入;静态方法:由对象或类直接调用,对参数没有特殊要求。Python中的面向对象类的实例方法实例方法和函数定义类似,但第一个参数必须为实例对象,参数名通常为self,表示当前调用这个方法的对象。实例方法定义语法如下:def实例方法名(self,[形参列表]):方法体在类的内部通过self.方法名(参数)来调用实例方法,在类的外部需通过对象名.方法名(参数)调用实例方法。调用时无需传递self参数。如果方法名以两个下划线开始,即“__方法名”,表示该方法属于私有方法,只允许在这个类的内部调用,在外部无法直接调用。defhaving_class(self,course_name):print(self.name,正在上课,课程为:,course_name)Python中的面向对象类方法类方法定义前一般添加“@classmethod”装饰器,第一个参数必须为类对象,参数通常为cls,表示当前类。类方法只能访问类变量,不能访问实例变量。使用类方法时,既可以通过“对象名.类方法名”来访问,也可以通过“类名.类方法名”来访问。类方法通常用于定义与该类相关而与具体对象无关的操作。classA:name=A@classmethoddefshow_1(cls):print(cls.name)A.show_1()a=A()a.show_1()@classmethoddef类方法名(cls,[形参列表]):方法体Python中的面向对象静态方法静态方法定义前一般添加“@staticmethod”装饰器。形式上与普通函数无区别。静态方法只能访问属于类的成员,不能访问属
本文标题:第9章-Python中的面向对象
链接地址:https://www.777doc.com/doc-7237801 .html