




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Python基础课教室讲师:式微 时间:2018年9月教学监督热线 教学监督热线 知识点回顾010203必须掌握:类的定义,属性和方法的概念必须掌握:方法中self的作用和意义必须掌握:初始化方法 和 析构方法本节知识点教学监督热线 01.继承02. 多继承03. 魔术方法PART ONE继承教学监督热线 思 考01上节课的作业题中,定义了一个矩形的类,现在我们要再定义一个正方形的类呢?该怎么做会更好?继承class Rectangle: # 矩形类 def _init_(self,length,width): self.length = length self.width = width d
2、ef area(self): areas = self.length * self.width return areasclass Square: # 正方形类 def _init_(self,length,width): self.length = length self.width = width def area(self): areas = self.length * self.width return areas继承 问题引入010203两个中有大量重复的代码, 是否能够只写一次 ?问题二: 继承的意义是什么 ?问题三: 继承是复制变量空间嘛 ?抽象出一个更抽象的类,放公共代码重用代
3、码,方便代码的管理和修改分类关系图继承关系图平行四边形长 宽矩形相邻边成90菱形相邻边相等矩形是平行四边形矩形应该拥有平行四边形的特征菱形也是平行四边形菱形也应该拥有平行四边形的特征class Rectangle: # 矩形类 def _init_(self,length,width): self.length = length self.width = width def area(self): areas = self.length * self.width return areasclass Square(Rectangle): # 正方形类 pass从矩形类中派生正方形类派生和继承是一
4、个意思继承搜索类直接基类间接基类访问类的属性或方法如果找不到转到其父类中查找如果再找不到转到其父类的父类中查找不是变量空间的复制 !思 考01正方形类继承矩形类之后,要求正方类在实例化的时候就判断是否满足正方形邻边相等的要求呢?重用父类的 _init_class Square(Rectangle): # 正方形类 def _init_(self, length, width): if length = width: Rectangle._init_(self, length, width)这个 self 是正方形类的实例不是矩形类的实例顶级基类 object_bases_ 特殊属性思考:为什么
5、返回的是一个元祖 ?Square. _bases_Rectangle. _bases_ 继承总结必须掌握:继承的概念和使用方法了解: 继承搜索了解:object 基类PART TWO多继承教学监督热线 Reflection0102刚才讲到了继承,一个类可以继承一个类,继承之后可以使用父类的方法和属性,那一个类可以继承多个类吗?如果可以继承多个类的话,那如果两个父类中有一样的方法的情况下,子类继承哪一个呢?多继承class Base: def play(self): print(这是Base)class A(Base): def play(self): print(这是A)class B(Bas
6、e): def play(self): print(这是B)class C(A, B): passc = C()BaseABC多继承BaseABC通过C类实例的方法调用来看当继承多个父类时,如果父类中有相同的方法,那么子类会优先使用最先被继承的方法Reflection01在上面的例子中,如果不想继承父类的方法怎么办呢?重写class Base: def play(self): print(这是Base)class A(Base): def play(self): print(这是A)class B(Base): def play(self): print(这是B)class C(A, B):
7、def play(self): print(这是C)c = C()当子类继承父类之后,如果子类不想使用父类的方法,可以通过重写来覆盖父类的方法Reflection01重写父类方法之后,如果又需要使用父类的方法呢?多继承方法一:class C(A, B): def play(self): A.play(self) print(这是C)方法二:class C(A, B): def play(self): super().play() print(这是C)当子类重写父类方法之后,子类如果想再次调用父类的方法,可以使用这两种方法super用法class Base: def play(self): su
8、per().play() print(这是Base)class A(Base): def play(self): super().play() print(这是A)class B(Base): def play(self): super().play() print(这是B)class C(A, B): def play(self): super().play() print(这是C)super 函数可以调用父类的方法在父类中也使用super函数之后,可以通过调用类的mro方法属性来查看继承关系官方推荐super的用法如示例所示多继承BaseABC在python3中,类被创建时会自动创建方法解
9、析顺序mroobject是所有类的父类object基于多继承的 Mix-in 设计模式拼积木(Mix-in)思想AnimalPeopleManWoman传统分类思想胳膊脑袋腿人思想转变注意:一般,“Mix-in类”是继承的终点 !最好,多继承就一层,且是最后一层多继承mrosuperMixinMixin是一种开发模式,给大家在今后的开发中提供一种思路super函数可以来调用父类的方法,使用super的好处在于即使父类改变了,那么也不需要更改类中的代码类在生成时会自动生成方法解析顺序,可以通过 类名.mro()来查看多继承总结必须掌握:super的用法了解:多继承方法解析顺序了解:Mixin开发
10、模式PART THREE魔术方法教学监督热线 Reflection01在讲字符串拼接的时候,字符串可以直接相加,那我们自定义的类可以实现吗?魔术方法class Rectangle: def _init_(self,length,width): self.length = length self.width = width def area(self): areas = self.length * self.width return areas def _add_(self, other): add_length = self.length + other.length add_width =
11、self.width + other.width return add_length,add_widtha = Rectangle(3, 4)b = Rectangle(5, 6)a + b魔术方法之运算方法运算符方法_add_(self,other)# x+y_sub_(self,other)# x-y_mul_(self,other)# x*y_mod_(self,other)# x%y_iadd_(self,other)# x+=y_isub_(self,other)# x-=y_radd_(self,other)# y+x_rsub_(self,other)# y-x_imul_(se
12、lf,other)# x*=y_imod_(self,other)# x%=y运算方法大家了解一下即可,在实际中应用并不多字符串表示 问题引入0102 在交互模式下输出的交互信息与 直接print的信息有些不同, 背后的原理是 ? 我们该如何使用这种机制 ?str和repr原理class Rectangle: def _init_(self,length,width): self.length = length self.width = width def area(self): areas = self.length * self.width return areas def _str_(s
13、elf): return length is %s, width is %s %(self.length, self.width) def _repr_(self): return area is %s%self.area()在python中,str和repr方法在处理对象的时候,分别调用的是对象的_str_和_repr_方法print也是如此,调用str函数来处理输出的对象,如果对象没有定义_str_方法,则调用repr处理在 shell 模式下,展示对象 _repr_ 的返回值对使用者使用友好的 _str_对开发者调试友好的 _repr_向使用者提供尽可能简洁且有用的信息。向开发者提供接近
14、创建时的信息。 def _str_(self,other): print(length is %s, width is %s %(self.length, self.width)def _repr_(self,other): print(area is %s%self.area()_str_ 与 _repr_ 该如何抉择strrepr尽可能的提供简洁且有用的信息。让用户尽可能吸收到必要的信息。尽可能向开发者提供创建该对象时的必要信息。让开发者可以直接通过复制粘贴来重建对象。Reflection01类的实例可以向函数一样被调用吗?_call_方法class Rectangle: def _ini
15、t_(self,length,width): self.length = length self.width = width def area(self): areas = self.length * self.width return areas def _call_(self): return this is _call_正常情况下,实例是不能像函数一样被调用的,要想实例能够被调用,就需要定义 _call_ 方法其他的魔术方法其他的魔术方法:_class_查看类名_base_查看继承的父类_bases_查看继承的全部父类_dict_查看全部属性,返回属性和属性值键值对形式_doc_查看对象
16、文档,即类中的注释(用引号注视的部分)_dir_查看全部属性和方法这些简单的魔术方法大家了解即可魔术方法应用场景_str_和_repr_原理作用通过合理的利用魔术方法,可以让我们更加方便的展示我们的数据在类中,很多事情其实调用的魔术方法来实现的str和repr都是分别调用这两个魔术方法来实现的魔术方法总结必须掌握:_str_ _repr_ _call_了解: 魔术方法的原理和作用每日Linux命令find 查找命令格式:find -path -optionspath :要查找的目录,默认是当前目录option:-name 按文件名的某种规则的查找-type 按文件类型查找 f 普通文件 l 符号连接 d 目录-size 按文件大小查找-exec:假设find指令的回传值为True,就执行该指令-print 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出示例:find ./ -name *.py -print 查找根目录下所有后缀为py的文件find ./ ! -name *.py 查找所有当前目录下所有不是py的文件find
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共停车场车位产权及管理权转让协议书
- 农家乐项目合作开发与经营管理合同
- 热带雨林桥梁防潮处理
- 【课件】液体的压强教学课件+-2024-2025学年人教版(2024)物理八年级下册
- 智慧医院后勤建设方案
- 癌症患者肠梗阻的护理
- 中班我会排队常规教案
- 支气管肺炎患儿的护理
- 污水提升系统
- 住院部呕吐护理
- 口腔诊所前台主管述职报告
- 2024年石家庄市市属国有企业招聘笔试真题
- 2024年广东“三支一扶”计划招募笔试真题
- 设备租赁方案(3篇)
- 公关费用标准管理制度
- 2025-2030年中国洁净室风扇过滤单元行业市场现状供需分析及投资评估规划分析研究报告
- 2025至2030中国汽车租赁行业发展分析及发展战略与市场策略报告
- 2025年烟台市中考地理试卷真题
- 安徽省合肥市名校2025届八年级英语第二学期期末统考试题含答案
- 2024年广东省广州市初中生物会考真题(含答案)
- 2025年河北省中考麒麟卷生物(一)
评论
0/150
提交评论