#面向对象的三大特征:继承、多态、封装。
#一、单继承:
# 1.
class Animal: #没有父类,默认继承了顶级父类object类。
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp class Person(Animal): #子类继承父类的属性和方法。
pass class Dog(Animal): #当Person和Dog具有相同的属性的时候,可以通过继承父类来简化代码。
pass p = Person('alex',10,9)
print(p.name)
d = Dog('jin',8,7)
print(d.name) #2.派生属性和派生方法:在继承父类的属性或方法的基础上,增加新功能:
class Animal:
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp def attack(self):
print('调用攻击技能') class Person(Animal):
def __init__(self,name,aggr,hp,money): #子类想派生属性,需要把初始化方法和参数重写一遍,并且添加新参数。
Animal.__init__(self,name,aggr,hp) #调用父类的属性。
self.money = money #派生属性 def attack(self,dog):
Animal.attack(self) #调用父类的方法。
print('%s掉血'%dog) #派生方法 alex = Person('alex',10,9,200)
print(alex.name)
print(alex.money)
alex.attack('jin') #3.当子类和父类的方法名一样的情况下,执行子类的方法:
class Animal:
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp
def attack(self):
print('调用攻击技能') class Person(Animal):
def attack(self): #子类和父类的方法名一样。
print('执行子类的方法') alex = Person('alex',100,80)
alex.attack() #结果:执行子类的方法 #4. super:
class Animal:
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp
def attack(self):
print('调用父类的攻击技能') class Person(Animal):
def __init__(self,name,aggr,hp,money):
super().__init__(name,aggr,hp) #父类也叫超类,super()调用父类,相当于super(Person,self),所以__init__后面不需要self。
self.money = money
def attack(self,a):
super().attack()
print('战斗力提高百分之{}'.format(a)) alex = Person('alex',100,80,800)
print(alex.name)
alex.attack(80) super(Person,alex).attack() #结果:调用父类的攻击技能。在类的外面也可以使用super:类的实例化对象调用父类的方法。

day14-单继承的更多相关文章

  1. 使用Object.create 克隆对象以及实现单继承

    var Plane = function () { this.blood = 100; this.attack = 1; this.defense = 1; }; var plane = new Pl ...

  2. java类为什么是单继承。类的继承,实现接口。

    java中提供类与类之间提供单继承. 提供多继承会可能出现错误,如:一个类继承了两个父类,而两个父类里面都有show()方法. class Fulei1{ public void show(){ Sy ...

  3. 虚方法的调用是怎么实现的(单继承VS多继承)

    我们知道通过一个指向之类的父类指针可以调用子类的虚方法,因为子类的方法会覆盖父类同样的方法,通过这个指针可以找到对象实例的地址,通过实例的地址可以找到指向对应方法表的指针,而通过这个方法的名字就可以确 ...

  4. C++对象模型:单继承,多继承,虚继承

    什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分.对于各种支持的底层实现机制. 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及虚函数 clas ...

  5. 对Java不能多继承,只能单继承,却可以实现多个接口的理解

    1.java与C++的不同点在于多继承. Java:不能多继承,只能单继承,但可以实现多个接口 C++:可以实现多继承.例如: class A extends B implements C,D,E { ...

  6. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  7. C++对象模型4--有重写的单继承

    有重写的单继承 派生类中重写了基类的print()函数. //Derived_Overwrite.h #pragma once #include "base.h" class De ...

  8. C++对象模型3--无重写的单继承

    C++对象模型中加入单继承 不管是单继承.多继承,还是虚继承,如果基于“简单对象模型”,每一个基类都可以被派生类中的一个slot指出,该slot内包含基类对象的地址.这个机制的主要缺点是,因为间接性而 ...

  9. js 完成单继承

    //1.使用prototype完成单继承. //定义一个A类 function A(){ } //为A类动态调用属性color,与方法sayColor A.prototype.color = &quo ...

  10. C++多继承的好处是增加了弹性和灵活性,Delphi类强迫单继承TObject是为了提供许多强大功能

    要说灵活性,是C++更强.我自己开发已经好几次碰到需要多继承的情况了. 但是Delphi强迫继承TObject,虽然是单继承,但是提供了相当多的强力功能.要说强大,那还是Delphi当仁不让. 摘自& ...

随机推荐

  1. Python调用c++可执行程序

    1.c++编译程序 #include <iostream> using namespace std; int test() { , b = ; return a+b; } int main ...

  2. POJ 1745:Divisibility 枚举某一状态的DP

    Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11001   Accepted: 3933 Des ...

  3. 大数据高可用集群环境安装与配置(02)——配置ntp服务

    NTP服务概述 NTP服务器[Network Time Protocol(NTP)]是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精 ...

  4. Java8集合框架——集合工具类Arrays内部方法浅析

    java.util.Arrays 备注:本文只对 Java8 中的 java.util.Arrays 中提供的基本功能进行大致介绍,并没有对其具体的实现原理进行深入的探讨和分析.详情可自己深入观摩源码 ...

  5. Centos6.5 安装zabbix3(收藏,非原创)

    1.安装PHP Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7 rpm -ivh  ...

  6. code force 1228C

    算是一题普通数论+思维题吧. 大概很多人是被题意绕晕了. 思路: 首先常规操作求出X的质因子. 然后题目要求的是,X的每个质因子p,在g(i,p)的连乘.i∈[1,n]: 我们转换下思维,不求每一个g ...

  7. java课程之团队开发冲刺阶段1.9

    一.总结昨天进度 1.学习了简单的消息推送方法,并且能够使用进行每日定时推送 二.遇到的困难 1.在每日推送的过程中,程序必须被正常关闭,如果程序是被切到后天然后直接结束进程的话,每日推送的线程服务也 ...

  8. 编写一段代码,打印一个M行N列的二维数组转置。(交换行和列)

    import edu.princeton.cs.algs4.*; public class No_1_1_13 { public static void main(String[] args) { i ...

  9. 微服务之docker(一)

    一.docker介绍及使用 1.docker简介 (1)Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windo ...

  10. spark与Scala版本对应问题

    在阅读一些博客和资料中,发现安装spark与Scala是要严格遵守两者的版本对应关系,如果版本不对应会在之后的使用中出现许多问题. 在安装时,我们可以在spark的官网中查到对应的Scala版本号,如 ...