Python笔记_第三篇_面向对象_6.继承(单继承和多继承)

1. 概念解释

  继承:有两个类:A类和B类。那么A类就拥有了B类中的属性和方法。

  * 例如:Object:是所有类的父亲,还可以成为基类或者超类(super())

  * 继承者为子类,被继承者成为父类。

 

2. 继承的作用

  * 继承花间了代码,减少了冗余。

  * 提高了代码的健壮性。

  * 提高了代码的安全性。

  * 是多态的前提。(Polymorphism)

  继承也有缺点:继承是高内聚、高耦合的形态。

  (备注:耦合和内聚是描述类与类之间的关系。耦合性越低、内聚性越高,代码质量越好)

 

3. 单继承

  超类函数:super()

  格式1:

  super(当前类名,self).继承内容

  其意思是:调用父类中的内容。

  格式2:

  super().继承内容 # 也可以不写括号中的内容。

  

  举例说明1:一个单继承的小例子

class Person(object):def __init__(self,name,age):self.name = nameself.age = agedef run(self):print("run")def eat(self,food):print("eat" + food)class Student(Person):def __init__(self,name,age):# 调用父类中的__init__也就是Person中的super(Student,self).__init__(name,age)stu = Student("Tom",18)
print(stu.name,stu.age)
stu.run() # 调用父类中的方法。

 

  举例说明2:我们发现子类其实也可以有自己的一些属性。

子类中还可以有自己独有的属性
class Person(object):def __init__(self,name,age):self.name = nameself.age = agedef run(self):print("run")def eat(self,food):print("eat" + food)class Student(Person):def __init__(self,name,age,stuID):# 调用父类中的__init__也就是Person中的super(Student,self).__init__(name,age)# 子类可以有一些独有的属性self.stuID = stuIDstu = Student("Tom",18,100)
print(stu.name,stu.age)
print(stu.stuID)

   

  举例说明3:

  另外,我们前面说过单下划线和双下划线中"__变量名"的这种形式,属于私有属性。这样子类继承父类的时候私有属性的时候我们可以通过子类访问父类中获取私有属性的方法得到。这里我们写了一个setMoney和getMoney的方法。可以访问到父类当中的私有属性了。

  我们还发现super()超类的方法,还可以直接用父类的名字点上想继承的属性,其效果也是一样的。

# 父类如果有私有属性无法继承过来。
# 但是通过子类访问父类当中获取私有属性的方法可以得到私有属性
class Person(object):def __init__(self,name,age,money):self.name = nameself.age = ageself.__money = money # 私有属性# 写set和get方法def setMoney(self,money):self.__money = moneydef getMoney(self):return self.__moneydef run(self):print("run")def eat(self,food):print("eat" + food)class Student(Person):def __init__(self,name,age,money,stuID):# 调用父类中的__init__也就是Person中的super(Student,self).__init__(name,age,money)# 表示让父类中的self代表当前的Student的对象# Person.__init__(self,name,age,money) #这种写法也是可以的# 此时的self相当于创建子类的对象# super().__init__(name, age, money) # 其实里面的内容不写也可以# 子类可以有一些独有的属性self.stuID = stuIDdef stuFunc(self):print(self.__money)stu = Student("Tom",18,123456,110)
print(stu.name,stu.age)
# stu.stuFunc()
# 报错
# Traceback (most recent call last):
#   File "F:/QUANT/练习/day04.py", line 95, in <module>
#     stu.stuFunc()
#   File "F:/QUANT/练习/day04.py", line 90, in stuFunc
#     print(self.__money)
# AttributeError: 'Student' object has no attribute '_Student__money'print(stu.getMoney()) # 通过继承过来的的共有方法访问私有属性。

 

4. 多继承

  也就是说,我们不光一个子类可以继承一个父类,也可以继承多个父类,通过逗号进行分割。  

  举例说明4:一个简单的多继承。

class Father(object):def __init__(self,money):self.money = moneydef play(self):print("play")def func(self):print("func")class Mother(object):def __init__(self, faceValue):self.faceValue = faceValuedef eat(self):print("eat")def func(self):print("func2")class Child(Father,Mother):def __init__(self,money,faceValue):Father.__init__(self,money)Mother.__init__(self,faceValue)# 此时的self指的是当前类的self# 我们写一个主程序
def main():c = Child(300,100)print(c.money,c.faceValue)c.play()c.eat()# 注意如果方法名相同,默认调用的是在括号中排前面的父类中的方法c.func()if __name__ == '__main__':main()

  

  举例说明5:

  思考:在添加100种动物,都有name属性和eat方法。采用继承解决的方式
  定义一个有name属性和eat方法的Animal类,让所有的动物类都继承自Animal

思考:在添加100种动物,都有name属性和eat方法。采用继承解决的方式
定义一个有name属性和eat方法的Animal类,让所有的动物类都继承自Animalclass Animal(object):  # 动物类def __init__(self,name):self.name = namedef eat(self):print(self.name + "")class Cat(Animal):  # 猫类def __init__(self,name):super(Cat,self).__init__(name)# 不用写了# def eat(self):#     print(self.name + "")class Mouse(Animal): # 老鼠类def __init__(self, name):super(Mouse, self).__init__(name)# 不用写了# def eat(self):#     print(self.name + "")Tom = Cat("Tom")
Jerry = Mouse("Jerry")Tom.eat()
Jerry.eat()

 

转载于:https://www.cnblogs.com/noah0532/p/10867189.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文本内容之间的关键词提取和相似度计算

背景 Web应用程序变得越来越智能。 从网站上使用服务的日子已经一去不复返了&#xff0c;用户不得不填写一个巨大的表格。 假设您有一个适合书迷的网站。 在Web 2.0之前&#xff0c;此类网站曾经以诸如年龄&#xff0c;阅读书籍&#xff0c;喜欢的书籍类型&#xff0c;语言偏好…

Windows XP SP3支持多用户远程桌面连接

远程桌面连接的确很方便&#xff0c;但是在Windows XP中只支持单一用户的连接&#xff0c;当第二个用户连接时&#xff0c;第一个用户就被迫断开并回到用户登录界面了&#xff0c;这可和多任务的操作系统理念不符啊&#xff0c;或许微软是为了突出Server系统的特点吧&#xff0…

构建用于测试的超大型内存InputStream

由于某种原因&#xff0c;我需要非常大的&#xff0c;甚至可能是无限的InputStream &#xff0c;它会反复地反复返回相同的byte[] 。 这样&#xff0c;我可以通过重复小样本来产生大量的数据流。 在Guava中可以找到类似的功能&#xff1a; Iterable<T> Iterables.cycle(I…

linux 调试小经验

1、查看netlink socket 丢包 cat /proc/net/netlink sk Eth Pid Groups Rmem Wmem Dump Locks Drops Inode c91eda00 0 1172 00000001 0 0 00000000 2 0 27767 c43eee00 0 -4099 00000000 0 0 00000000 2 0 41200 c9266e00 0 1186 00000000 0 0 00000000 2 0 28922 c1af580…

前端打印功能

方法一&#xff1a; html代码&#xff1a; 在要打印的内容上加入&#xff1a;<!--startprint-->和<!--endprint--> js代码&#xff1a; $(.printData).click(function(){bdhtmlwindow.document.body.innerHTML; sprnstr"<!--startprint-->"; …

Vlc支持IE 360 低版本的Google浏览器

VLC 插件代码&#xff1a; <object typeapplication/x-vlc-plugin pluginspage"http://www.videolan.org/" idvlc eventsfalse width"720" height"410"><param namemrl valuertsp://admin:123456******:554/h264/ch1/main/av_stream /&…

同步多线程

同步多线程&#xff08;SMT&#xff09;是一种在一个CPU 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上&#xff0c;同步多线程是一种将线程级并行处理&#xff08;多CPU&#xff09;转化为指令级并行处理&#xff08;同一CPU&#xff09;的方法。 同步多线…

如何使用布隆过滤器在Java中建立大容量的内存缓存

背景 缓存是解决日常软件问题的重要概念。 您的应用程序可能会执行CPU密集型操作&#xff0c;而您又不想一次又一次地执行这些操作&#xff0c;而是只导出一次结果并将其缓存在内存中。 有时瓶颈是IO&#xff0c;例如您不想重复访问数据库&#xff0c;并且想缓存结果并仅在基础…

Centos7安装Python3的方法

由于centos7原本就安装了Python2&#xff0c;而且这个Python2不能被删除&#xff0c;因为有很多系统命令&#xff0c;比如yum都要用到。 [rootVM_105_217_centos Python-3.6.2]# python Python 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)…

ajax请求导致status为canceled的原因

在使用layui的form表单提交以后&#xff0c;请求状态总是canceled。后来在form表单的后面添加了一行代码&#xff1a; return false; 就可以了。 文档&#xff1a;https://www.layui.com/doc/modules/form.html#onsubmit 错误&#xff1a; 解决方法&#xff1a; 总结一下&…

CSS图片水平垂直居中

Html: <div id"MainContent"><img src"QQ截图20150515140512.png" width"247" height"192"></img></div></div> CSS: #MainContent {display:table-cell;width: 700px;height: 800px;background: #0C78…

如何开启OpenSSL和mcrypt

1&#xff0c;要想开启mcrypt支持&#xff0c;系统需要安装了libmcrypt.dll库。这个一般用户是没有安装过的&#xff0c;但不用担心&#xff0c;PHP的windows发行包里已经给我们附带了此文件&#xff0c;在PHP压缩包的根目录下即可找到&#xff0c;然后将其复制到%system%/syst…

如果BigDecimal是答案,那肯定是一个奇怪的问题

总览 许多开发人员已确定BigDecimal是处理金钱的唯一方法。 通常&#xff0c;他们通过用BigDecimal替换double来确定错误或十个错误。 我对此没有说服力的是&#xff0c;也许他们可以解决double处理中的错误以及使用BigDecimal的额外开销。 根据我的比较&#xff0c;当被问到改…

算法思想_常见四种

文章目录常用算法思想描述穷举算法思想1. 基本思想2. 步骤3.实例递推算法1. 基本思想2. 步骤3. 实例递归算法1. 基本思想2. 步骤3. 实例1. 分治算法1. 基本思想2. 步骤3. 实例概率算法1. 基本思想2. 步骤3. 实例如果还有时间&#xff0c;将继续更新常用算法思想描述 穷举算法思…

[转] 做个自强不息的青年

人的出生和际遇本身造就了每个人的道路都不同&#xff0c;对于青年人来说&#xff0c;如何能够面对逆顺&#xff0c;如何面对起伏&#xff0c;如何能够正确设定理想并为之激发生命的火焰&#xff0c;在持续的奋斗中不断提升自我&#xff0c;自强不息而自立利他&#xff1f;在与…

commonJS — 全局操作(for Window)

for Window github: https://github.com/laixiangran/commonJS/blob/master/src/forWindow.js 代码 /*** Created by laixiangran on 2016/1/24* homepage&#xff1a;http://www.cnblogs.com/laixiangran/* for Window*/ (function() {var com window.COM window.COM || {}…

点击返回上一页失效

点击取消的时候&#xff0c;返回上一页&#xff0c;没有效果&#xff0c;仍然停留在当前页&#xff0c;还报500&#xff1b;改成window.history.go(-1)也不生效 代码&#xff1a; <button class"st-btn-normal st-btn-cancel cancle" onclick"javascript:wi…

如何通过7个Logback调整立即改善Java日志记录

基准测试可帮助您发现Logback在压力下的性能 日志记录对于服务器端应用程序是必不可少的&#xff0c;但这是有代价的。 令人惊讶的是&#xff0c;微小的更改和配置调整对应用程序的日志记录吞吐量有多大影响。 在这篇文章中&#xff0c;我们将根据每分钟的日志条目对Logback的性…

JS中的编码

今天发现我输入的中文变成了另外一种格式&#xff0c;查了一下&#xff0c;原来是转换成了数字编码。在这里介绍一下数字编码和base64&#xff0c;做个记录 1.出现原因&#xff1a;在开发中经常需要对用户输入的数据进行编码然后才能通过HTTP请求发送给后台&#xff0c;或者对…

commonJS — DOM操作(for DOM)

for DOM github: https://github.com/laixiangran/commonJS/blob/master/src/forDOM.js 代码 /*** Created by laixiangran on 2016/1/24* homepage&#xff1a;http://www.cnblogs.com/laixiangran/* for DOM*/(function(undefined) {var com window.COM window.COM || {};…