前面我们定义了人的类,并用这个类实例化出两个人jack和lily,查看了它们的内存空间。

现在我们再来看看类中所存在的对向对象编程的三大特性之继承的一些特性。

前面定义了一个人的类,可是我们还知道,人都有属于自己的职业,比如说老师类,医生类,警察类等。

我们可以为每个职业都定义一个类,按照前面的定义,我们可以使用下面的代码来实现。

定义一个老师类:

class Teacher:
def __init__(self,name,age,sex,course):
self.name=name
self.age=age
self.sex=sex
self.course=course def walk(self):
print("%s is walking slow"%self.name) def teach(self):
print("%s is teaching"%self.name)

定义一个学生类:

class Student:
def __init__(self,name,age,sex,group):
self.name=name
self.age=age
self.sex=sex
self.group=group def walk(self):
print("%s is walking slow"%self.name) def study(self):
print("%s is studying hard"%self.name)

我们可以看到teacherstudent类中,有很多重复的代码。

它们都有人类所共有的name,age,sex等特征,以及有人类有的walk这个技能,

那么我们就可以把人类共有的name,age,sex特征和walk技能抽离出来,生成一个人的类,

然后用老师和学生的类来继承人的类的这些特征和技能,这样可以避免写重复的代码。

继承关系是子类继承父类,是类与类之间的关系

解决代码重用的问题,减少代码冗余,这就是我们说的类的三大特征之一的继承。

把两个或多个类中的共同点抽离出来,生成一个新的类,也就是被继承的类,我们称之为父类
把从父类中继承特征和技能的类称为子类或基类

具体实现代码如下:

我们先把老师和学生中所重复的代码抽离出来,生成一个人类:

class Person:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def walk(self):
print("%s is walking slow"%self.name)

然后定义一个老师类,来继承人的类的一个特征和技能:

class Teacher(Person):
def __init__(self, name, age, sex, course):
Person.__init__(self, name, age, sex)
self.course = course def teach(self):
print("%s is teaching" % self.name)

最后,再定义一个学生类,来继承人的类的一些特征和技能:

class Student(Person):
def __init__(self, name, age, sex,group):
Person.__init__(self, name, age, sex)
self.group = group def study(self):
print("%s is studying hard" % self.name)

类定义好了,在通过把类实例化生成一个学生和一个老师

t1=Teacher("Jack",18,"male","python")
s1=Student("Tom",28,"female","group1")

就可以调用s1t1的特征和技能了。

比如,我想知道学生的姓名和老师的年龄,就可以这样做:

print(t1.age,s1.name)

输出结果为:

18 Tom

调用老师t1的走路的技能:

t1.walk()

输出为:

Jack is walking slow

调用老师t1的教书的技能:

t1.teach()

输出为:

Jack is teaching

调用学生s1的走路的技能:

s1.walk()

输出为:

Tom is walking slow

调用学生s1学习的技能:

s1.study()

输出为:

Tom is studying hard

我们还可以使用下面的语句来查看子类Student所继承的父类的名称:

print(Student.__bases__)

得到结果如下:

(<class '__main__.Person'>,)

同样的,打印子类Teacher的父类也会得到同样的结果,显示其父类为Person.

在上面的输出中,可以看到输出结果是一个元组。这样的话,一个子类就可以继承多个父类了。

查看子类的父类得到的结果是前面定义的Person类,那我们查看Person的类的话,会得到什么样的结果呢?

print(Person.__bases__)

输出为:

(<class 'object'>,)

其结果也是一个元组,但是这里出现了一个object,那么这个object又是什么东东?

事实上,在python3中,所有的类默认都继承object类。

在python中:
凡是继承了object类的子类,以及该子类的子类都被为新式类;
没有继承object类的子类称为经典类.

所以python3中,所有的类都是新式类

而在python2中,没有继承object的类,以及它的子类,通常称为经典类。

来看几个例子:

这几个例子,都是在python2的解释器中运行的:

>>> class Foo:
... pass
...
>>> Foo.__bases__
()
>>> class Bar(object):
... pass
...
>>> Bar.__bases__
(<type 'object'>,)

可以看到,Foo这个类是一个经典类,而定义的第二个Bar类则是一个新式类

在定义老师和学生类的时候,在类的名字后面要加上被继承的类Person的名字,以告诉python解释器,这里调用了类的继承的特性。

浅谈python的对象的三大特性之继承的更多相关文章

  1. 浅谈python的对象的三大特性之封装

    我们家里都有电视机,从开机,浏览节目,换台到关机,我们不需要知道电视机里面的具体细节,只需要在用的时候按下遥控器就可以完成操作,这就是功能的封装. 在用支付宝进行付款的时候,只需要在用的时候把二唯码给 ...

  2. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

  3. python基础(24):面向对象三大特性一(继承)

    1. 继承 1.1 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继 ...

  4. python学习 day23 面向对象三大特性之继承

    ### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...

  5. python - class类 (四) 三大特性之一 :继承

    继承: #继承 #什么时候用继承? # 1.当类之间有显著的不同,并且较小的类是较大的类的所需的组建时,用组合比较好. # 2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 # ...

  6. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  7. C#核心基础--浅谈类和对象的概念

    浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...

  8. 浅谈python字符串存储形式

    http://blog.csdn.net/zhonghuan1992 钟桓 2014年8月31日 浅谈python字符串存储形式 记录一下自己今的天发现疑问而且给出自己现有知识有的回答. 长话短说,用 ...

  9. 开发技术--浅谈Python函数

    开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...

随机推荐

  1. CSS position: absolute、relative定位问题详解

    CSS2.0 HandBook上的解释:  设置此属性值为 absolute 会将对象拖离出正常的文档流绝对定位,而不考虑它周围内容的布局.假如其他具有不同 z-index 属性的对象已经占据了给定的 ...

  2. BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)

    1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...

  3. Zabbix安装客户端agent(windows和Centos7)

    上一篇简单的介绍了怎么搭建Zabbix监控服务端,接下来给大家介绍怎么在windows和Centos7上安装zabbix_agent客户端. Zabbix是一个基于WEB界面的提供分布式系统监视以及网 ...

  4. 浅谈MySQL集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  5. cesium编程入门(一)cesium简介

    cesium编程入门 cesium是什么 Cesium 是一个跨平台.跨浏览器的展示三维地球和地图的 javascript 库. Cesium 使用WebGL 来进行硬件加速图形,使用时不需要任何插件 ...

  6. [国嵌笔记][023][ARM寻址方式]

    寻找方式 1.处理器根据指令中给出的信息来找到指令所需操作数的方式 2.立即数寻址 操作数本身在指令中给出,立即数前加”#”表示立即数寻址,操作数在指令中 3.寄存器寻址 利用寄存器中的数值作为操作数 ...

  7. UE4 保存为bitmap

    TArray<FColor> colorData;    colorData.Init(FColor(0, 0, 255, 255), 1920 * 1080);    for (int ...

  8. 关于在vue-cli中使用微信自动登录和分享

    (以下所有接口由后台提供) 一.微信自动登录 //定义事件 methods:{ //判断是否微信登陆 是不是微信浏览器 isWeiXin() { let ua = window.navigator.u ...

  9. PhoneGap安装手顺

    http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/

  10. 【开发技术】java异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...