Python程序设计基础教程(微课版第2版)7.6.1 继承_第1页
Python程序设计基础教程(微课版第2版)7.6.1 继承_第2页
Python程序设计基础教程(微课版第2版)7.6.1 继承_第3页
Python程序设计基础教程(微课版第2版)7.6.1 继承_第4页
Python程序设计基础教程(微课版第2版)7.6.1 继承_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

通过继承已有的类可以有效实现代码的复用类的继承CHAPTER7继

承为了实现类的继承类名添加放置子类将自动继承父类的所有成员继

承1的公有成员和保护类型成员,也可以重写父类的公有和保护类型成员子类可以直接访问父类234的私有成员,但可以通过父类名前缀间接访问,由于私有成员的命名改写规则,子类不会重写父类的私有成员子类不能直接访问父类则实例化子类时将自动调用父类构造器方法,如子类重写构造器方法,则必须显式调用父类的构造器方法,会用到内建super()函数如果子类没有实现构造器方法如该对象所属的类没定义该成员,Python将自动在对象的父类中依次查找,直到找到该成员,如果没找到,会提示AttributeError异常当对一个对象调用某个成员时继承规则继

承01#-*-coding:utf-8-*-02#inheritance.py03classA:04def__init__(self):05self.public_value_1='pulicvalue1inclassA'06defpublic_method(self):07print('callingpublicmethodinclassA')08def__private_method(self):09print('callingprivatemethodinclassA')10classB1(A):11pass12classB2(A):13def__init__(self):#重写构造器,但没有显式调用父类的构造器14self.public_value_2='pulicvalue2inclassB2'15defpublic_method(self):#重写父类公有方法16print('callingpublicmethodinclassB2')17def__private_method(self):#定义自己的私有方法18print('callingprivatemethodinclassB2')19classB3(A):20def__init__(self):#重写构造器,并显式调用父类的构造器21super().__init__()22self.public_value_2='pulicvalue2inclassB3'【例】继承的一个具体实例继

承>>>b1,b2,b3=(B1(),B2(),B3())>>>b1.public_value_1#由于B1没有定义构造器,父类构造器自动被调用,父类的公有属性被初始化并被子类继承'pulicvalue1inclassA'>>>b1.public_method()#直接调用继承自父类的公有方法callingpublicmethodinclassA>>>b1.__private_method()#子类不能直接访问父类的私有方法Traceback(mostrecentcalllast):File"<pyshell#6>",line1,in<module>b1.__private_method()AttributeError:'B1'objecthasnoattribute'__private_method'

【例】在IDLE中打开inheritance.py,按键盘“F5”键运行代码继

承>>>b1._A__private_method()#用父类名前缀间接调用父类的私有方法callingprivatemethodinclassA>>>b2.public_value_2#调用子类新增的属性'pulicvalue2inclassB2'>>>b2.public_value_1#由于子类B2没有显示调用父类的构造器,父类属性没有被初始化,将提示属性错误Traceback(mostrecentcalllast):File"<pyshell>",line1,in<module>AttributeError:'B2'objecthasnoattribute'public_value_1'

【例】在IDLE中打开inheritance.py,按键盘“F5”键运行代码继

承>>>b2.public_method()#父类的公有方法被重写了callingpublicmethodinclassB2>>>b2._B2__private_method()#采用子类名前缀间接调用子类的私有方法callingprivatemethodinclassB2>>>b2._A__private_method()#采用父类名前缀间接调用父类的私有方法callingprivatemethodinclassA>>>b3.public_value_1#由于子类B3显式调用了父类的构造器,因此父类的公有属性被初始化并被子类继承'pulicvalue1inclassA'

【例】在IDLE中打开inheritance.py,按键盘“F5”键运行代码继

承Python允许多重继承多个直接父类父类名放在类名后括号内父类名间用逗号隔开继

承只有一个直接父类自

动依次查找多重继承继

承如果一个类在定义时没有指明父类则其直接父类为object类Python的任何一个类都直接或间接派生自object类object类提供了很多魔法方法的默认实现Python

提供

object

类继

承“__str__”对象的字符串表示“__eq__”相等比较“__hash__”返回对象的哈希值继

承【例】

Python提供了一个名为object的类举例如下>>>classDefaultObj:#等效于classDefaultObj(object):pass>>>a=DefaultObj()>>>b=DefaultObj()>>>a.__str__()'<__main__.DefaultObjobjectat0x000001C2FE75EEF0>'>>>a==bFalse>>>a.__hash__()121062776559>>>b.__hash__()-9223371915791239431继

承类直接或间接继承isinstance()函数issubclass()函数查看一个实例对象是否属于某个类的实例查看一个类是否属于另一个类的直接或间接子类继

承>>>classC:#等效于classC(object):pass>>>classB(C):pass>>>classA(B):pass>>>issubclass(C,object)True>>>issubclass(B,object),issubclass(B,C)(True,True)>>>issubclass(A,object),issubclass(A,B),issubcla

温馨提示

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

评论

0/150

提交评论