版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2024/10/2第6章类和继承主讲人:目录2024/10/221.类和对象2.实例属性和类属性3.类的方法4.构造函数5.析构函数6.运算符的重载7.继承重点2024/10/21.类和对象Python中使用class保留字来定义类,类名的首字母一般要大写,例如:classMyclass(object): definfor(self): print("thisisaclass")class后面紧接着类名,即Myclass,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。类Myclass中只有一个方法infor,类的方法至少有一个参数self,self代表将来要创建的对象本身。2024/10/21.类和对象当class语句执行时,这只是赋值给对象的变量,而对象可以用任何普通表达式引用。例如,Firstclass是写在模块文件内,而不是在交互模式下输入的,就可将其导入,在类开头的那行可以正常地使用它的名称。fromtextimportFirstclassclassSecondclass(Firstclass): defdisplay(self):
…
或者,其等效写法如下。
importtextclassSecondclass(text.Firstclass): defdisplay(self):
…2024/10/21.类和对象类与对象示例classBird():def__init__(self): self.hungry=Truedefeat(self): ifself.hungry: print('Aaaah...') self.hungry=False else: print('No,thanks!')>>>b1=Bird()>>>b1.eat()Aaaah...>>>b1.eat()No,thanks!>>>b1.eat()No,thanks!>>>b1.hungryFalse>>>b1.hungryFalse2024/10/21.类和对象类和对象是面向对象编程的两个主要方面,类创建一个新类型,而对象是这个类的实例。这类似于上面一个类Bird(),而b1是类Bird的一个实例,也就是类的一个对象(实例)。
类的组成元素:关键字(类):class
类的名字:Bird
构造函数:__init__(self)
类的方法:eat(self)(b1.eat())
类的特性:hungry(b1.hungry)2024/10/21.类和对象
类与对象格式类的组成:
classClass_Name(SuperClass,…):class_variable=valuedef__init__(self,argv):statementdefclass_func(self,argv):statement
关键字(类):class
类的名字:Class_name
构造函数:__init__(self,argv)
类的方法:class_func(self,argv)
类的特性:class_variable
2024/10/21.类和对象
对象定义
class_object_1=Class_Name()class_object_2=Class_Name()class_object_1.class_variableclass_object_2.class_variableclass_object_1.class_func(argv)class_object_2.class_func(argv)
对象定义:class_object_1=Class_Name()
对象特性:class_object_1.class_variable
对象方法:class_object_1.class_func(argv)目录2024/10/221.类和对象2.实例属性和类属性3.类的方法4.构造函数5.析构函数6.运算符的重载7.继承重点2024/10/22.实例属性和类属性属性有两种,一种是实例属性,另一种是类属性。实例属性是在构造函数__init__中定义的,定义时以self作为前缀类属性是在类中方法之外定义的属性。在主程序中(在类的的外部),实例属性属于实例(对象)只能通过对象名访问;类属性属于类可通过类名访问。
在类的方法中可以调用类的其它方法,可以访问类属性、对象属性。2024/10/22.实例属性和类属性实例属性和类属性。程序:classCar:price=100000#定义类属性
def__init__(self,c):self.color=c #定义实例属性2024/10/22.实例属性和类属性#主程序car1=Car("Red")car2=Car("Blue")printcar1.color,Car.priceCar.price=110000#修改类属性C='QQ'#增加类属性car1.color="Yellow"#修改实例属性printcar2.color,Car.price,Cprintcar1.color,Car.price,C程序运行结果:Red100000Blue110000QQYellow110000QQ2024/10/22.实例属性和类属性如果属性名以__(双下划线)开头则是私有属性,否则是公有属性。私有属性在类外不能直接访问。Python提供了访问私有属性的方式,可用于程序的测试和调试。对象名._类名+私有成员名classFood: def__init__(self): self.__color='red' self.price=10apple=Food()apple.price=20print(apple.price,apple._Food__color)#访问私有成员apple.(_)Food__color="Blue"print(apple.price,apple._Food__color)print(apple.__color) #不能直接访问私有属性程序运行结果如下。
20red20Blueprint(apple.__color) #不能直接访问私有属性目录2024/10/221.类和对象2.实例属性和类属性3.类的方法4.构造函数5.析构函数6.运算符的重载7.继承重点2024/10/23.类的方法类有3种方法:公有方法、私有方法和静态方法。双下划线__开头则是私有方法,上一行用@staticmethod标识的方法是静态方法,否则是公有方法。
公有方法、私有方法都属于对象,每个对象都有自己的公有方法和私有方法;公有方法通过对象名调用,私有方法不能通过对象名调用,只能在属于对象的方法中通过self调用;静态方法属于类,静态方法只能通过类名调用,静态方法中不能访问属于对象的成员,只能访问属于类的成员。2024/10/23.类的方法公有方法、私有方法和静态方法的定义和调用。classFruit:price=0def__init__(self):self.__color='Red' #定义和设置私有属性colorself.__city='Kunming' #定义和设置私有属性citydef__outputColor(self): #定义私有方法outputColorprint(self.__color) #访问私有属性colordef__outputCity(self): #定义私有方法outputCityprint(self.__city) #访问私有属性city2024/10/23.类的方法defoutput(self): #定义公有方法outputself.__outputColor()#调用私有方法outputColorself.__outputCity() #调用私有方法outputCity@staticmethoddefgetPrice(): #定义静态方法getPricereturnFruit.price@staticmethoddefsetPrice(p): #定义静态方法setPriceFruit.price=p2024/10/23.类的方法#主程序apple=Fruit()apple.output()print(Fruit.getPrice())Fruit.setPrice(9)print(Fruit.getPrice())apple.__outputColor()#是否可行?思考:能否添加公有方法,以便能通过对象名访问私有成员变量__color?程序运行结果:RedKunming09目录2024/10/221.类和对象2.实例属性和类属性3.类的方法4.构造函数5.析构函数6.运算符的重载7.继承重点2024/10/24.构造函数类的构造函数定义类的构造函数的形式为:def__init__(self):
superclass.__init__(self)#未绑定超类
super(subclass,self).__init__()#调用super()statement类的构造函数与其它普通方法不同的地方在于,当一个对象被创建后,会立即调用构造方法,就有点类似于程序中的init的初始化方法。如果要继承构造方法,可以调用未绑定的超类构造方法,也可以用super函数调用超类构造函数。2024/10/24.构造函数Python在创建对象时,首先调用特殊方法__new__()创建该对象,之后调用特殊方法__init__()对其进行初始化。在实际的编程中,我们创建的几乎所有Python类都只需要重新实现__init__()方法,因为如果我们不提供自己的__new__()方法,Python会自动调用object.__new__()方法。classStudent(object): def__init__(self,first='',last='',id=0): self.firstnamestr=first self.lastnamestr=last self.idint=id2024/10/24.构造函数>>>s1=Student()>>>print(s1.firstnamestr)>>>s2=Student(last='Python',first='Hello')>>>print(s2.lastnamestr)Python这里生成了Student类的两个实例—s1和s2。s1调用构造函数时生成,没有带任何参数,即Student()。生成第二个实例s2时,给出了参数中的两个,即Student(last='Python',first='Hello')。目录2024/10/221.类和对象2.实例属性和类属性3.类的方法4.构造函数5.析构函数6.运算符的重载7.继承重点2024/10/25.析构函数Python中类的析构函数是__del__(开始和结束都是双下划线),用来释放对象占用的资源,在Python收回对象空间之前自动执行。如果用户未设计析构函数,Python将提供默认的析构函数。析构函数属于对象,每个对象都有自己的析构函数。classCar: def__init__(self,n): self.num=nprint('编号为',self.num,'的对象出生了') def__del__(self):print('编号为',self.num,'的对象死了')2024/10/25.析构函数car1=Car(1)car2=Car(2)delcar1delcar2程序运行结果如下。编号为1的对象出生了编号为2的对象出生了编号为1的对象死了编号为2的对象死了目录2024/10/221.类和对象2.实例属性和类属性3.类的方法4.构造函数5.析构函数6.运算符的重载7.继承重点2024/10/26.运算符的重载
在Python中可通过重载运算符来实现对象之间的运算。Python把运算符与类的方法关联起来,每个运算符都对应一个函数。运算符重载就是让用类写成的对象可截取并响应用在内置类型上的运算(加法、切片、打印和点号运算符等)。2024/10/26.运算符的重载例如,Number类提供一个方法来拦截实例的构造函数(__init__),此外还有一个方法捕捉减法表达式(__sub__)。这种特殊的方法可与内置运算相绑定。classNumber: def__init__(self,start): self.data=start def__sub__(self,other): returnNumber(self.data-other)>>>x=Number(5)>>>y=x-2>>>y.data32024/10/26.运算符的重载重载方法举例:1.索引和分片:__getitem__和__setitem__如果类中定义了(或继承了)的话,则对于实例的索引运算,会自动调用__getitem__。当实例x出现在x[i]这样的索引运算中,Python会调用这个实例继承的__getitem__方法,把x作为第一个参数传递,并将方括号内的索引值传给第二个参数。例如,下面的类将返回索引值。>>>classIndex: def__getitem__(self,index): returnindex…>>>x=Index()>>>x[3]3>>>foriinrange(6): print(x[i],end='')…0123452024/10/26.运算符的重载2.索引迭代:__getitem__for语句的作用是从0到更大的索引值,重复对序列进行索引运算,直到检测到超出边界的异常。__getitem__也可以是Python中一种重载迭代的方式。如果定义了这个方法,for循环每次循环时都会调用类的__getitem__。并持续搭配有更高的偏移值。>>>classStepper:def__getitem__(self,i): returnself.data[i]… >>>x=Stepper()>>>x.data='spam'>>>x[1]'p'>>>foriteminx: print(item,end='')…spam2024/10/26.运算符的重载3.迭代器对象:__iter__和__next__
上一页__getitem__是有效的,但它是迭代退而求其次的方法。Python所有的迭代环境会有优先尝试__iter__的方法,再尝试__getitem__。从技术角度上讲,迭代环境是通过iter去尝试寻找__iter__方法来实现,而这种方法返回一个迭代器对象。如果已经提供了,python会重复调用迭代器对象的next()方法,直到发生StopIteration异常。如果没有找到__iter__,python会使用__getitem__机制。2024/10/26.运算符的重载classSquares: def__init__(self,start,stop): self.value
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《TPS丰田生产方式》课件
- 决定销售业绩的重要心态(课件)
- LNG气化站应急备用气源自用建设项目可行性研究报告模板-立项备案
- 一年级语文上册拼音aoe
- 2024年江苏省招聘社区工作者题库及参考答案
- 单位管理制度收录大合集【人员管理篇】十篇
- 单位管理制度品读选集【职员管理】十篇
- 楼梯 栏杆 栏板(一)22J403-1
- 果冻袋行业行业发展趋势及投资战略研究分析报告
- 中国返利网站行业市场调研分析及投资战略咨询报告
- ATS技术交流(新型发动机智能恒温节能冷却系统)100318
- 手术区皮肤的消毒和铺巾ppt课件
- 日有所诵(二年级)
- 2022年度培训工作总结
- 应急照明装置安装施工方法
- 静力触探技术标准
- 钢结构、膜结构安全技术交底
- DB34∕T 4057-2021 中小河流防汛特征水位分析规程
- 单肺通气技术
- 学生基本情况分析(通用11篇)
- 明天会更好歌词
评论
0/150
提交评论