继承、多魔术方法_第1页
继承、多魔术方法_第2页
继承、多魔术方法_第3页
继承、多魔术方法_第4页
继承、多魔术方法_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python基础课教室讲师:聆听时间:2018年5月教学监督热线教学监督热线知识点回顾010203必须掌握:类的定义,属性和方法的概念必须掌握:方法中self的作用和意义必须掌握:初始化方法和销毁方法本节知识点教学监督热线01.继承02.多继承03.魔术方法PARTONE继承教学监督热线思考01在Python中,类之间继承什么东西?怎么表示继承?继承p=Parent()#实例化父类parent

c=Child()#实例化子类childclassParent:

def__init__(self):

print('正在初始化Parent类')

def__del__(self):

print('正在销毁Parent类')classChild(Parent):#括号里面写上其他的类名,表示继承

pass继承问题引入0102两个中有大量重复的代码,

是否能够只写一次?问题二:继承的意义是什么?重写classParent:

hair_color='黑色'

def__init__(self):

print('正在初始化Parent类')

def__del__(self):

print('正在销毁Parent类')

defeat(self):

print('Parent类正在进食')

classChild(Parent):

defeat(self):

print('正在吃面')继承总结必须掌握:继承的概念和使用方法必须掌握:重写的使用PARTTWO多继承教学监督热线Reflection0102一个类可以继承一个类,继承之后可以使用父类的方法和属性,那一个类可以继承多个类吗?如果可以继承多个类的话,那如果两个父类中有一样的方法的情况下,子类继承哪一个呢?多继承classParentA:

deflisten(self):

print(‘继承ParentA类的listen方法’)

defeat(self):

print(‘我正在吃我的小咸鱼’)

classParentB:

deflisten(self):

print(‘继承ParentB类的listen方法’)

defrun(self):

print(‘我正在跑步’)

classChild(ParentA,ParentB):

deflisten(self):

super().listen()

print('聆听')多继承BaseParentAParentBChildclassBase:

deflisten(self):

print('这是Base类的listen方法')

classParentA(Base):

deflisten(self):

print('这是ParentA类的listen方法')

defeat(self):

print('我正在吃我的小咸鱼')

classParentB(Base):

deflisten(self):

print('这是ParentB类的listen方法')

defrun(self):

print('我正在跑步')

classChild(ParentB,ParentA):

deflisten(self):

print('聆听')多继承通过Child类实例的方法调用来看当继承多个父类时,如果父类中有相同的方法,那么子类会优先使用最先被继承的方法BaseParentAParentBChildReflection01在前面我们说了重写,重写父类方法之后,如果又需要使用父类的方法呢?多继承当子类重写父类方法之后,子类如果想再次调用父类的方法,可以使用这两种方法#方法一

classChild(ParentB,ParentA):

deffun1(self):

ParentB.fun1(self)

print('Child')#方法二

classChild(ParentA,ParentB):

deffun1(self):

super().fun1(self)

print('Child')super用法super函数可以调用父类的方法默认调用第一顺位的父类方法可以通过给与参数来确定调用哪个父类方法#super调用父类方法

classChild(ParentA,ParentB):

deffun1(self):

super().fun1(self)

print('Child')#super中参数使用

classChild(ParentA,ParentB):

deffun1(self):

super(ParentA,self).fun1(self)

print('Child')多继承在python3中,类被创建时会自动创建方法解析顺序mroobject是所有类的父类objectBaseParentAParentBChild多继承总结必须掌握:super的用法了解:多继承方法解析顺序PART

THREE魔术方法教学监督热线Reflection01在讲字符串拼接的时候,字符串可以直接相加,那我们自定义的类可以实现吗?魔术方法classA:

def__add__(self,other):

print('在调用A的__add__方法')

classB:

def__add__(self,other):

print('在调用B的__add__方法')

a=A()

b=B()

b+a魔术方法之运算方法运算符方法__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__(self,other) #

x*=y__imod__(self,other) #

x%=y运算方法大家了解一下即可,在实际中应用并不多str和repr原理在python中,str和repr方法在处理对象的时候,分别调用的是对象的__str__和__repr__方法print也是如此,调用str函数来处理输出的对象,如果对象没有定义__str__方法,则调用repr处理在ipython中下,展示对象__repr__的返回值classA:

def__repr__(self):

print('正在调用repr方法')

return'__repr__返回的内容'

def__str__(self):

print('正在调用__str__方法')

return'__str__返回的内容'

__str__

与__repr__该如何抉择strrepr尽可能的提供简洁且有用的信息。让用户尽可能吸收到必要的信息。尽可能向开发者提供创建该对象时的必要信息。让开发者可以直接通过复制粘贴来重建对象。Reflection01类的实例可以向函数一样被调用吗?__call__方法正常情况下,实例是不能像函数一样被调用的,要想实例能够被调用,就需要定义__call__方法classA:

def__call__(self):

return'thisis__call__'其他的魔术方法其他的魔术方法:__class__ 查看类名__base__ 查看继承的父类__bases__ 查看继承的全部父类__dict__ 查看全部属性,返回属性和属性值键值对形式__doc__ 查看对象文档,即类中的注释(用引号注视的部分)__dir__ 查看全部属性和方法这些简单的魔术方法大家了解即可魔术方法应用场景__str__和__repr__原理作用通过合理的利用魔术方法,可以让我们更加方便的展示我们的数据在类中,很多事情其实调用的魔术方法来实现的str和repr都是分别调用这两个魔术方法来实现的魔术方法总结必须掌握:__str____repr____call__了解:魔术方法的原理和作用本节知识点回顾必须掌握:继承和多继承的概念和使用必须掌握:super的用法必须掌握:__str____repr____call__方法了解:多继承方法解析顺序了解:魔术方法原理和作用作业把上课的关于继承和多继承以及重写的知识点敲一遍现有如右图所示两个类,定义一个Child类继承右图两个类并且重写__init__方法,在实例化类Ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论