一、类的封装:

  • 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问
class Boss():
# 类的公共属性
level=1 # 类的初始化(构造方法),在类实例化时自动调用。
def __init__(self,name,hp,sp,atk):
self.name = name
self.hp = hp
self.sp = sp
self.atk = atk # 创建类的方法,Boss被击中时HP减少
def boss_hp_reduce(self,hero_atk):
# 被击中时HP减少
self.hp -= hero_atk
print("Boss受到了%d点伤害" % hero_atk)
print("Boss现在的生命为%d" % self.hp) # 攻击到hero时,heroHP减少
def boss_attack(self,hero_hp):
hero_hp -= self.atk
print("Hero受到了%d点伤害" % self.atk)
print("Hero现在的血量为%d" % hero_hp) # 当Boss魔力值充满时,释放大招
def boss_sp_full(self):
print("Boss:哈哈,我放大招了")
print("Hero被击飞!受到了99999伤害")
print("Hero阵亡了") # 设定hero的属性,同样可以使用类封装,但是我懒得弄了
hero_atk = 100
hero_hp = 1000 # 创建一个实例
boss = Boss("icedemon",10000,5,350) # 调用实例的方法
boss.boss_hp_reduce(hero_atk)
boss.boss_attack(hero_hp)
boss.boss_sp_full()

输出结果如下:

>>> Boss受到了100点伤害
>>> Boss现在的生命为9900
>>> Hero受到了350点伤害
>>> Hero现在的血量为650
>>> Boss:哈哈,我放大招了
>>> Hero被击飞!受到了99999伤害
>>> Hero阵亡了

二、类的继承:

  • 从父类继承,继承可以让子类从父类获取特征(属性和方法)
  • 在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码,多复用,子类可以定义自己的属性和方法
class Enemy():
def __init__(self,name,hp,atk):
self.name = name
self.hp = hp
self.atk = atk def attack(self):
print("%s发起攻击,hero受到了%d点伤害!" % (self.name,self.atk)) # 继承Enemy类
class Enemy2(Enemy):
pass # 创建实例
enemy = Enemy("毛毛虫",10,2)
enemy1 = Enemy2("小鸡",100,10)
enemy.attack()
enemy1.attack()
父类:Enemy就是Enemy2的父类,也成为基类,超类
子类:Enemy2就是Enemy的子类,也成为派生类
如果未定义时,等同于继承object,在Python中,object是所有类的父类

运行结果

>>> 毛毛虫发起攻击,hero受到了2点伤害!
>>> 小鸡发起攻击,hero受到了10点伤害!

三、类的继承之Super()函数

  1. 如果子类继承父类不做初始化,那么会自动继承父类属性。
  2. 如果子类继承父类做了初始化,且不调用super初始化父类构造函数,那么子类不会自动继承父类的属性。
  3. 如果子类继承父类做了初始化,且调用了super初始化了父类的构造函数,那么子类也会继承父类的属性。
class Enemy():
def __init__(self):
self.name = "蜜蜂"
self.level = 1
def summary(self):
print("%s,等级为%d" % (self.name,self.level)) # 一般来说子类做了初始化就不能继承父类的属性,但可以利用super函数
class Enemy2(Enemy):
def __init__(self):
self.name = "蜘蛛"
self.level = 5
super().__init__() # 已经初始化的子类不再继承父类的属性,已经存在的方法也是
class Enemy3(Enemy):
def __init__(self):
self.name = "蝴蝶"
self.level = 2
def summary(self):
print("%s,等级为%d" % (self.name,self.level)) enemy = Enemy()
enemy2 = Enemy2()
enemy3 = Enemy3() enemy.summary()
enemy2.summary()
enemy3.summary()

输出结果:

>>> 蜜蜂,等级为1
>>> 蜜蜂,等级为1
>>> 蝴蝶,等级为2

Python的类和继承的更多相关文章

  1. Python 笔记 : 类和继承

    # -*- coding=  utf-8 -*- # 文件编码定义的语法规则是: coding[:=]/s*([-/w.]+) # 未指定编码将默认为 : ASCII # 同时要注意物理文件的编码也要 ...

  2. Python 基础 类的继承

    如果寂静定义了Person类,需要定义新的Student 和Teacher 类时 可以直接从Person 中继承 class Person(Object): def __init__(self,nam ...

  3. 【python】-- 类的继承(新式类/经典类)、多态

    继承 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,现在准备随笔的 是继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言的一个主要功能就是“继承”.继承是指这样一种能力:它可 ...

  4. python基础--类的继承以及mro

    继承: 什么是继承: 继承是一种关系,描述两个对象之间什么是什么的关系 在程序中,继承描述的是类和类之间的关系 例如 a继承了b,a就能直接使用b已经存在的方法和属性了 a称之为子类,b称之为父类,成 ...

  5. Python——12类的继承

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  6. 【python】类的继承和多态

    比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self): print 'Animal is r ...

  7. Python 派生类子类继承类

    1.创建list类的子类Namedlist,初始化新类,创建新对象实例johnny,检查对象类型,并使用list的一些功能来存储数据 >>> class Namedlist(list ...

  8. (转)Python异常类的继承关系

    原文:https://blog.csdn.net/Dragonfli_Lee/article/details/52350793 https://www.cnblogs.com/Lival/p/6203 ...

  9. python的类的继承-接口继承-归一化设计

    1.先在子类本身找,如果子类没有,会去父类找 class Dad: '这个是爸爸类' money=10#Dad类的数据属性 def __init__(self,name): print("爸 ...

随机推荐

  1. [入门到吐槽系列] Webix 10分钟入门 一 管理后台制作

    前言 本人是服务端程序员,同时需要兼职前端开发.常用的就是原生态的HTML.Javascript,也用过ExtJS.Layui.可是ExtJS变公司后非常难用.Layui上手还行,用过一段时间,会觉得 ...

  2. 关于c#知识的学到的新知识点

    开头:对这段时间学习的小知识点做一个整理.希望自己能理清思路.当然如果能帮到大家那就更好了. 1.判断写法 !True=false 思考:以前判断一直写if(布尔变量==false),今天看到这个,才 ...

  3. linux基础-jdk1.8和weblogic12.2.1.3.0安装

    转至:https://www.cnblogs.com/jiarui-zjb/p/9642416.html 1.环境探查与准备 安装jdk和weblogic前需要对进行安装的linux系统硬件和软件环境 ...

  4. docker学习笔记(1)——ubuntu16.04安装docker(含如何彻底卸载docker,docker拉取镜像失败解决)

    参考博客: 1.官网教程:https://docs.docker.com/engine/install/   根据本机不同的信息选择不同的安装方式:  https://docs.docker.com/ ...

  5. ElementUI Tree树形控件renderContent return时报错

    问题描述: 使用Tree树形控件使用render-content渲染时return后报错或npm run dev时候报错,报错信息相同,如下: 问题分析: renderContent函数中需要使用js ...

  6. 前端好用API之getBoundingClientRect

    前情 在前端开发需求中,经常需要获取元素的尺寸位置相关的属性,以往的做法是调用不同api获取相关属性的. getBoundingClientRect介绍 getBoundingClientRect() ...

  7. JAVA 包装类 Wrapper

    包装类 针对八种基本数据类型相应的引用类型-包装类 有了类的特点,就可以调用类中的方法. 除了Boolean和Character其他的包装类的父类是Number 继承关系图: Character Bo ...

  8. JZ-061-序列化二叉树

    序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存. 序 ...

  9. JZ-013-调整数组顺序使奇数位于偶数前面

    调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对 ...

  10. .net core 学习笔记一 Program与Startup

    一.Program文件: 1.CreateWebHostBuilder(): 构建web服务2.WebHost.CreateDefaulBuilder(): 使用默认配置,包括 1.使用了Kestre ...