day24 01 初识继承

面向对象的三大特性:继承,多态,封装

一、继承的概念

继承:是一种创建新类的方式,新建的类可以继承一个或者多个父类,父类又可称基类或超类,新建的类称为派生类或者子类

class A:  # 父类,基类,超类
pass
class B: # 父类,基类,超类
pass
class A_son(A,B): # 子类,派生类
pass
class AB_son(A,B): # 子类,派生类
pass
  • 一个类可以被多个类继承,先有父类才有子类
  • 一个类可以继承多个父类----只在python里面才可以,其他语言不可以

注意:从父类不能知道自己将会被哪个类继承,但是从子类肯定可以知道自己的父类,这是从子类像父类指向单方向线程

二、父类的查看方法

类似于对像可以使用_dict_方法查看属性,子类也可以使用_bases_方法查看它的父类

class A:  # 父类,基类,超类
pass
class B: # 父类,基类,超类
pass
class A_son(A): # 子类,派生类
pass
class B_son(A,B): # 子类,派生类
pass
class AB_son(A,B): # 子类,派生类
pass
print(A_son.__bases__)
print(B_son.__bases__)
print(AB_son.__bases__)
print(A.__bases__)
print(B.__bases__)

运行结果:

C:\Users\sku1-1\PycharmProjects\untitled\venv\Scripts\python.exe "C:/Users/sku1-1/PycharmProjects/untitled/day24  01 初识继承.py"
(<class '__main__.A'>,)
(<class '__main__.A'>, <class '__main__.B'>)
(<class '__main__.A'>, <class '__main__.B'>)
(<class 'object'>,)
(<class 'object'>,) Process finished with exit code 0

从上面的运行结果可以看到,特别的父类A和B的父类都是‘object’,如果没有继承父类,就默认继承‘object’,这也是python3的新式类

三、继承表达的关系:什么是什么的关系

只有是两个类之间才会产生继承的关系,两个类之间存在一些共同的抽象的东西,将这些共同的东西抽象出来就可以成为这两个类的父类

  以之前的人狗大战的游戏为例,里面的人物角色与狗的角色,定义它们的类的时候,里面有一些属性是相同的,比如:name,blood,aggr,而且狗和人都是动物,这样就可以抽象出它们的父类---animal,参考以下代码:

class animal:  # 父类
def __init__(self,name,blood,aggr):
self.name=name
self.blood=blood
self.aggr=aggr
class dog(animal): # 子类
def bite(self,someone):
someone.blood-=self.aggr
class someone(animal): # 子类
def attack(self,dog):
dog.blood -=self.aggr dog1 = dog('溜溜球',200,500)
print(dog1.name)
person1 = someone('王昭君',300,500)
print(person1.name)

运行结果:

溜溜球
王昭君

day24 01 初识继承的更多相关文章

  1. python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)

    一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...

  2. TensorFlow --- 01初识

    由于博客园对Markdown支持不够友好,阅读此文请前往云栖社区:TensorFlow --- 01初识

  3. day24 02 单继承(派生)

    day24 02 单继承(派生) 1.首先来看一个简单的例子 比如: 狗类的属性有:吃,喝,看门 鸟类的属性有:吃,喝,下蛋 看门和下蛋就是这两种动物不同的属性,而吃喝是两个共同的属性 以下代码实现了 ...

  4. day22 01 初识面向对象----简单的人狗大战小游戏

    day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战   怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...

  5. day24 03 多继承

    day24 03 多继承 正常的代码中  单继承==减少了代码的重复 继承表达的是一种 子类是父类的关系 1.简单的多继承关系 A,B,C,D四个类,其中D类继承A,B,C三个父类,因此也叫多继承,子 ...

  6. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象

    079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...

  9. 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类

    078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...

随机推荐

  1. mysql8.0数据库忘记密码时进行修改方法

    最近安装mysql8.0数据库,用以前的修改mysql方法,没有成功,所以参考网上前辈的做法,自己重新整理了下忘记密码时进行修改方法 1.安装mysql8.0后发现,在安装目中,是没有my.ini 和 ...

  2. NET Core准备:使用Hyper-V安装Ubuntu Server 16.10

    NET Core准备:使用Hyper-V安装Ubuntu Server 16.10 概述 Hyper-V是微软的一款虚拟化产品,和VMWare一样采用的hypervisor技术.它已经被内嵌到Win1 ...

  3. 什么是语义化的HTML?有何意义?为什么要做到语义化?

    一.什么是语义化的HTML? 语义化的HTML就是正确的标签做正确的事情,能够便于开发者阅读和写出更优雅的代码的同时让网络爬虫很好地解析. 二.为什么要做到语义化? 1.有利于SEO,有利于搜索引擎爬 ...

  4. 转Keil 中使用 STM32F4xx 硬件浮点单元

    Keil 中使用 STM32F4xx 硬件浮点单元一.前言有工程师反应说 Keil 下无法使用 STM32F4xx 硬件浮点单元, 导致当运算浮点时运算时间过长,还有 一些人反应不知如何使用芯片芯片内 ...

  5. gitinore修改不生效

    .gitignore只能忽略那些尚未被被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的.一个简单的解决方法就是先把本地缓存删除(改变成未track状态),然后 ...

  6. 用指针的方式实现,重写strrchr函数的功能

    char *strchrTest(char * ptr,char c); Action(){ char str[]={"thisisadog"}; char c='s'; lr_o ...

  7. Windows 漏洞利用开发

    第一阶段:简单栈溢出 分析栈溢出原理 寻找溢出点,了解pattern_create和pattern_offset计算溢出点的原理 寻找JMP ESP跳板,分析利用JMP ESP跳板劫持程序流的原理 编 ...

  8. 变量和数据类型&运算符

    变量和数据类型&运算符 变量 变量的作用:用来存储数据 变量命名的规范:字(字符串)下(_下划线)美($)人(¥) 数 (可以包括数字)骆驼 有意义(可以以字母,下划线,美元符号,人民币符号开 ...

  9. C++类和结构体的区别

    C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;

  10. ctDNA|endosymbiosis

    5.10叶绿体基因组编码多种蛋白质和RNA 叶绿体和线粒体的共同点:叶绿体和线粒体的大小,功能(编码区)大体一致,但叶绿体拥有更多基因,所以在编码tRNA时,也有内含子作为被剪切片段. 因为在原核生物 ...