继承是创建新类的方法,以下是几个概念

父类,基类,超类: 被继承的类

子类,派生类:继承而产出的类

单继承:继承一个父类

多继承:继承多个父类

  • 继承: 什么是什么的关系
  • 父类中没有的属性,在字类中出现就叫派生方法
  • 如果字类中有的方法,就用子类的,如果没有就用父类的,如果父类也没有,就报错  子类---父类
  • 如果子类和父类都有的方法,但还需要调用父类的方法,就需要单独调用父类的方法
class ParentClass1:
pass class ParentClass2:
pass class Sonclass1(ParentClass1): # Sonclass1 类继承了ParentClass1类 为单继承
pass class Sonclass2(ParentClass1,ParentClass2): # Sonclass2继承了ParentClass1和ParentClass2 为多继承(Python独有)
pass # 通过__bases__方法,查看类的继承情况
print(Sonclass1.__bases__)
print(Sonclass2.__bases__)
print(ParentClass1.__bases__)
print(ParentClass2.__bases__) # (<class '__main__.ParentClass1'>,) # 确认为单继承
# (<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>) # 确认为多继承
# (<class 'object'>,) # 如果没有继承,默认继承object类
# (<class 'object'>,)# 如果没有继承,默认继承object类

重用性

当抽象出相同的属性或方法后,可以找到一个被继承类

例子1

# 如下代码段定义了两个类,一个是老师类,一个是学生类
# 老师和学生类都有名字,性别,年龄等属性,也都有吃的技能,代码重复性高
# 所不同的是老师会教的技能,学生有学的技能 class Teacher:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex def eat(self):
print('%s is eating'%self.name) def teach(self):
print('%s is teaching'%self.name) class Student:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex def eat(self):
print('%s is eating' % self.name) def study(self):
print('%s is studying'%self.name)
# 因为老师和学生都是人类,都有名字,姓名,性别属性,也有吃的技能,所以抽象出一个父类,将这些重复性的属性和方法定义,并在子类里继承父类的属性和功能

class Person:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex def eat(self):
print('%s is eating'%self.name) class Teacher(Person): def teach(self):
print('%s is teaching'%self.name) class Student(Person): def study(self):
print('%s is studying'%self.name)

派生

当然子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了

# 下述代码中定义了一个人类和狗类,都有姓名和年龄属性,
# 不同的是人类有性别属性,动物有品种属性
# 那么怎么解决姓名和年龄的代码重复呢
class Person:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex class Dog:
def __init__(self,name,age,kind):
self.name = name
self.age = age
self.kind = kind

# 将人和狗类进一步抽象出一个动物类,有名字,姓名的属性,在实例化对象时

Animal.__init__(self,name,age)  父类.__init(self,参数)传入共有的参数
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age class Person(Animal):
def __init__(self,name,age,sex):
Animal.__init__(self,name,age)
self.sex = sex # 派生属性 class Dog(Animal):
def __init__(self,name,age,kind):
Animal.__init__(self,name,age)
self.kind = kind # 派生属性 wangys = Person('wangys',18,'男')
print(wangys.name)

如果既想使用父类的方法,又想使用子类的方法,需要将父类单独执行

class  Dog():
def __init__(self,name,hp,aggr,kind):
self.name = name
self.hp = hp
self.aggr = aggr
self.kind = kind def eat(self):
self.hp +=100
print('吃药回血')
print('%s汪汪叫'%self.name) d = Dog('d',100,10,'tady')
d.eat()
print(d.hp)
class Animal:
def __init__(self,name,hp,aggr):
self.name = name
self.hp = hp
self.aggr = aggr def eat(self):
self.hp +=100
print('吃药回血') class Dog(Animal):
def __init__(self,name,hp,aggr,kind):
Animal.__init__(self,name,hp,aggr)
self.kind = kind def eat(self):
Animal.eat(self)
print('%s汪汪叫'%self.name) d = Dog('d',100,10,'tady')
d.eat()
print(d.hp)

可以使用super

class Animal:
def __init__(self,name,hp,aggr):
self.name = name
self.hp = hp
self.aggr = aggr def eat(self):
self.hp +=100
print('吃药回血') class Dog(Animal):
def __init__(self,name,hp,aggr,kind):
super().__init__(name,hp,aggr)
self.kind = kind def eat(self):
super().eat()
print('%s汪汪叫'%self.name) d = Dog('d',100,10,'tady')
d.eat()
print(d.hp)

多继承

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

  1. python面向对象三大特性之一继承、多态、封装

    继承,即在定义一个类时,以另一个类为参数,则称这个新定义的类继承了参数类,父类又称为基类. 单继承表示只继承一个类,多继承表示继承多个类. class parent1: pass class pare ...

  2. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  3. python面向对象-三大特性

    python面向对象编程三大特性 小结:前面我们说完了类和对象的关系,相信对类和对象的理解更加透彻..让我们一起去研究面向对象的三大特性吧.... 继承 1.什么继承? 在程序中继承就是事物之间的所属 ...

  4. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  5. python面向对象三大特性

    面向对象的三大特性: 封装.继承和多态 一.封装 封装,顾名思义就是将内容封装到某个地方,以后可以直接调用被封装到某处的内容. - 将内容封装到某处 - 从某处调用被封装的内容 第一步,将内容封装到某 ...

  6. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

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

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

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

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

  9. 《Python》 面向对象三大特性之继承

    一.继承大纲: 继承和抽象(两个概念) 1.单继承: 语法: 父类.基类.超类 子类.派生类 继承与重用:子类可以使用父类中的名字(变量和方法) 继承与派生:子类在父类的基础上又新创建了自己需要的方法 ...

随机推荐

  1. js-ES6学习笔记-Set和Map数据结构

    1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Set 函数可以接受一个数组(或类似数组的对 ...

  2. Jedis(java操作redis数据库技术)

    Redis有什么命令,Jedis就有什么方法. 客户端无法连接时,需要考虑防火墙配置,比如6379端口是否开放,也可以直接关闭防火墙. Jedis连接池: import org.junit.Test; ...

  3. 【转载】双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  4. 第一节,Windows10下Darkflow的安装与测试(YOLO)

    1.下载Darkflow:https://github.com/thtrieu/darkflow 2.解压到目录,打开cmd,进入到解压的目录,并输入python setup.py build_ext ...

  5. 【转】python模块分析之logging日志(四)

    [转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...

  6. Python运维开发基础02-语法基础【转】

    上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...

  7. ES6学习笔记五(promise异步)

    知识点1:rosolve是执行下一步then() // Promise { let ajax=function(){ console.log('执行2'); return new Promise(fu ...

  8. K-query SPOJ - KQUERY 离线 线段树/树状数组 区间大于K的个数

    题意: 给一个数列,一些询问,问你区间$[l.r]$大于$K$的个数 题解: 又一个"人尽皆知傻逼题"? 我们用一个01序列表示当前询问时,该位置的数字是否对答案有贡献, 显然,对 ...

  9. Android应用内嵌cocos2dx游戏项目

    cocos2dx的Android环境搭建(Windows/Mac) 我用的cocos2dx3.15版本的. 以下步骤是在Windows平台执行的. 创建Cocos2d-x项目 将刚才下载的cocos2 ...

  10. css3 - 旋转的木马

    参考资料: 张鑫旭  : http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-trans ...